SqlConnection 

SQL Server 2016の教科書 開発編

SQL Server 2016の教科書 開発編

接続文字列

//接続文字
string connectionStringUp = @"Data Source=.\SQLExpress;Initial Catalog=Test;UID=sa;PWD=sa;Pooling=true;";

string connectionStringWin = @"Data Source=.\SQLExpress;Initial Catalog=Test;Integrated Security=True;Pooling=true;";

//接続文字ビルダ
SqlConnectionStringBuilder bldr = new SqlConnectionStringBuilder();
bldr["Data Source"] = @".\SQLExpress";
bldr["Initial Catalog"] = "Test";
bldr["Integrated Security"] = true;
bldr["Pooling"] = true;

SqlConnectionStringBuilder bldr2 = new SqlConnectionStringBuilder();
bldr2.DataSource = @".\SQLExpress";
bldr2.InitialCatalog = "Test";
bldr2.UserID = "sa";
bldr2.Password= "sa";
bldr2.Pooling= true;
  • 既に開いているSqlConnectionオブジェクトでOpenメソッドを呼び出すと、InvalidOperationExceptionが発生します。SqlConnectionオブジェクトが開いているかはStateプロパティを確認する。
  • 既に閉じているSqlConnectionオブジェクトでCloseメソッドを呼び出して、例外は発生しません。
  • 接続プールとは。SqlConnectionオブジェクトのCloseメソッドを呼び出すと、実際に接続は閉じずに接続プールに残します。後で同じ接続情報と資格情報を使用して接続すると同じ内部接続情報を再利用してDBとのやりとりを行います。ADO.NETでは既定で接続プールがONになっています。約5分すると接続が再利用されていないと判断され、接続プールから削除されます(正確な時間は決まっていません)。接続プールを無効化する場合は接続文字列に"Pooling=False"を追加して接続ごと無効にすることができます。
  • プールされた接続の開放。
//接続プールをリセットします (空にします)。呼び出し時に使用中の接続がある場合、それらは適切にマークされ、それらに対して Close が呼び出されたときに (プールに返される代わりに) 破棄されます。 
SqlConnection.ClearAllPools();

//connection に関連付けられている接続プールをクリアします。また、呼び出し時に connection に関連付けられている接続が使用中の場合、それらは適切にマークされ、それらに対して Close が呼び出されたときに (プールに返される代わりに) 破棄されます。 
SqlConnection.ClearPool(con);
  • SqlCommandの作成
using(SqlCommand cmd = con.CreateCommand())
{
    cmd.CommandText = "SELECT COUNT(ID) FROM T_USER";
    MessageBox.Show(((int)(cmd.ExecuteScalar())).ToString());
} 
  • SqlTransactionの開始
SqlTransaction trn = con.BeginTransaction();
DataTable dtSchema = con.GetSchema("Tables");
string tables= string.Empty;
foreach (DataRow dr in dtSchema.Rows)
{
    tables  += dr["TABLE_NAME"].ToString() + Environment.NewLine;
}
string []restrictions = new string[]{"Test","dbo","T_USER",null};
DataTable dtSchema = con.GetSchema("Columns", restrictions);
string columns = string.Empty;
foreach (DataRow dr in dtSchema.Rows)
{
    columns += dr["COLUMN_NAME"].ToString() + Environment.NewLine;
}