PHP で SQL Server on Linux に接続するチュートリアル

Ubuntu でデモ環境を作るために、docs のをぽちぽち実行してたんですが、

GitHub - Microsoft/msphpsql: Microsoft Drivers for PHP for SQL Server
に貼られてるこちらのリンク先の方が見やすそうでした。
www.microsoft.com
※最後は 列ストア使って100倍だ~ってとこまで載ってる

メモ SQL Server への接続が暗号化されているかを確認する

昨日聞かれたのでちょろっと調べてみました。

まあ固いのは、通信の中身を見るのが確実ですね。
SQL Server の 動的管理ビュー(DMV) でも確認出来るようです。
sys.dm_exec_connections (TRANSACT-SQL) | Microsoft Docs

ローカルの SQL ServerSSL証明書入れるの面倒だったので、Azure SQL DB で試してます。

select * from sys.dm_exec_connections where auth_scheme = 'SQL'

f:id:odashinsuke:20180714104007p:plain

encryption - How can I check if connection to Sql Server is encrypted? - Database Administrators Stack Exchange

Microsoft MVP アワード (Data Platform) を受賞させていただきました

今回で6回目(7年目)の受賞になりました。

今後もより一層のコミュニティ活動/情報発信していきますので、SqlWorld :: ホーム 共々宜しくお願いします。  

最近もうちょい情報発信しないとなーと思いつつも出来てないので、次はどうなることやら。。

07/24(火) SQLWorld★大阪#47 開催します

SqlWorld :: SQLWorld★大阪#47 開催します。29回目の平日夜開催で、前回同様 ハンズオン 形式行う予定です。

【日時】
2018年07月24日(火曜日) 19:00~21:00
 

【イベント概要】
SQLWorld 29回目の平日夜開催~。今回も、みんなで SQL を書いてみようというハンズオン企画です!ブラウザがあれば参加出来るようにしていますので、iPad 等のタブレットでも大丈夫です。
 

【会場】
フェンリル株式会社さま大阪本社 http://www.fenrir-inc.com/
〒530-0011 大阪府大阪市北区大深町 3番1号 グランフロント大阪タワーB(オフィス)
 

【参加費】
無料
 

【持ち物】
パソコン/タブレット (DB のインストールは不要です。)
 

【参加可能人数】
13 人
 

お題に沿って、SQL を書いてみようという勉強会です。是非ご参加を~。
今回は初心者向けの優しめの問題を考え中です。

開催回数は増えていっていますが、続き物というわけでは無いので初めて参加される方でもお気軽にどぞー。

ASP.NET Core 2.1 を IIS でホストする時にハマったメモ

Host ASP.NET Core on Windows with IIS | Microsoft Docs
これの通りにやっとけば問題無いです。

検証した環境は、Windows Server 2008 R2 SP1 です。

ミスったのは install-the-net-core-hosting-bundle のとこ。
Hosting Bundle をインストールする時に、OPT_NO_X86=1 を指定していなくて x86版もインストールしていた事。

これのせいで、
Dreaded ErrorCode = '0x80070002 on IIS · Issue #1234 · aspnet/Hosting · GitHub
と同じ事象になりました。

↓のように web.config で dotnot のパスを直書きしたら直るのですが、x86版の .NET Core をアンインストールしても直りました。
How do I fix HTTP Error 502.5 - Process Failure when... - Gordon Beeming

再検証したけど、インストールする時にコマンドから OPT_NO_X86 を指定したら大丈夫でした。
dotnet-hosting-2.1.0-win.exe OPT_NO_X86=1

ちなみに Core 2.0 を Core 2.0.8 の Hosting Bundle で動かした時は、x86 インストールしててもデフォルトのままで動きました。

Azure SQL DB の FileStream サポートが unplanned に

Implement FILESTREAM for blobs into Azure Blob Store – Customer Feedback for Microsoft Azure

まだ閉じてはないので、もっと Vote したら変わるかもー。

One of the main benefits of using FileStream is that your blob data and the corresponding database record don't get out of sync. If you have to use two separate systems to store blobs with related data, you have to write a lot of code just to keep them in sync, and deal with all the possible scenarios where one or the other might have an issue.

ほんこれ。。

VSTS の ビルドで SQL Server LocalDB を使ってテストしたい

わざわざ SQL DB 立てたくなかったので LocalDB 使えるか調べたメモ

こんなのを見つけたので出来そうな感じでしたが、
Database Integration Tests in Visual Studio Team Services and Cake Build | Trailmax Tech


で教えてくれたので特に何もせず接続文字列だけ LocalDB にして動かす形にしてます。

VSTS の Hosted VSTS2017 agent で動かすので、LocalDB は既定のインスタンス(MSSQLLocalDB)で問題無しですね。*1
ちなみにバージョンは 2018/05/07 時点で SQL Server 2016 SP1 でした。

Database の作成や初期データは、ビルド実行前に *.bacpac で投入する方法にしてます。
※個別のテスト用のデータは、テスト毎に投入しますが不変なデータも毎回入れるのは面倒なので事前に用意する形です。

bacpac は、ざっくりいうと スキーマとデータをパッケージングしたファイルです。
Data-tier Applications | Microsoft Docs
これがあれば、SQL DB / SQL Server にデータベース(スキーマとデータ)丸ごとインポートすることが出来ます。

bacpac のインポートは、PowerShell でさくっと出来ます。
このスクリプトVSTS のビルド定義 PowerShell から呼び出すだけ。

$dir = [System.IO.Path]::GetDirectoryName($myInvocation.MyCommand.Definition)

Add-Type -Path "$dir\Microsoft.SqlServer.Dac.dll"
$srv = New-Object Microsoft.SqlServer.Dac.DacServices "Data Source=(localdb)\MSSQLLocalDB;Pooling=False"
$package = [Microsoft.SqlServer.Dac.BacPackage]::Load("$dir\Sample.bacpac")
$srv.ImportBacpac($package, "Sample")

気を付ける点は、Microsoft.SqlServer.Dac.dll 読むのには、依存関係にある dll も読み込める場所に配置しとく必要がある位ですかね。
今回は、
NuGet Gallery | Microsoft.SqlServer.DacFx.x64 140.3881.1
を使いましたが、Microsoft.SqlServer.Dac.dll を含む6つの dll を *.ps1 と同じ場所に置いてます。

接続文字列は 環境変数 にあればそこから取る形にしてます。*2
VSTS で実行する時は、ビルド定義で接続文字列埋め込む形です。

using System;
using System.Data.SqlClient;
using Xunit;
using Dapper;
using Xunit.Abstractions;

public class UnitTest1 {
  [Fact]
  public void Test1() {
    var connstr = Environment.GetEnvironmentVariable("VSTS_CONNSTR")
      ?? @"普段使う接続文字列";
    using (var conn = new SqlConnection(connstr)) {
      Assert.Equal("Test", conn.ExecuteScalar<string>(
          @"select Name from Table1 where Id = 1"));
    }
  }
}

VSTS の ビルドで 環境変数の設定はこちらを参考に。
Build variables | Microsoft Docs
指定する接続文字列はこんな感じで。

Server=(localdb)\MSSQLLocalDB;Initial Catalog=Sample;Pooling=false

*1:他から繋がないし

*2:開発環境でのテストは、普通の SQL Server 使いたい