あなたが尋ねている問題を引き起こす主な問題は、接続が決して開かれないことです。
接続が開かれるまで、コマンドを実行することはできません。
他にもいくつか問題があります。
- エラーの特定に役立つエラー処理は見当たりません。エラーが表示されないように、エラーを飲み込んでいる可能性があります。
- 文字列を連結しているため、SQLインジェクションを利用できます。パラメータ化されたクエリについて学ぶことを強くお勧めします。
- 接続にusingステートメントを使用していないため、自動的に閉じて破棄されます
いくつかのベストプラクティスがここにリストされています。これは、「using」ステートメントを適切に使用するための抜粋です。
C#で「Using」ステートメントを使用する
C#プログラマーにとって、ConnectionオブジェクトとDataReaderオブジェクトを常に閉じるようにする便利な方法は、usingステートメントを使用することです。usingステートメントは、usingステートメントのスコープを離れるときに、「使用中」のオブジェクトに対してDisposeを自動的に呼び出します。例えば:
//C#
string connString = "Data Source=localhost;Integrated Security=SSPI;Initial Catalog=Northwind;";
using (SqlConnection conn = new SqlConnection(connString))
{
SqlCommand cmd = conn.CreateCommand();
cmd.CommandText = "SELECT CustomerId, CompanyName FROM Customers";
conn.Open();
using (SqlDataReader dr = cmd.ExecuteReader())
{
while (dr.Read())
Console.WriteLine("{0}\t{1}", dr.GetString(0), dr.GetString(1));
}
}