接続文字列
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"を追加して接続ごと無効にすることができます。
SqlConnection.ClearAllPools();
SqlConnection.ClearPool(con);
using(SqlCommand cmd = con.CreateCommand())
{
cmd.CommandText = "SELECT COUNT(ID) FROM T_USER";
MessageBox.Show(((int)(cmd.ExecuteScalar())).ToString());
}
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;
}