ExecuteReader:接続プロパティが初期化されていません。
私のコーディングは
protected void Button2_Click(object sender, EventArgs e)
{
SqlConnection conn = new SqlConnection("Data Source=Si-6\\SQLSERVER2005;Initial Catalog=rags;Integrated Security=SSPI");
SqlDataReader rdr = null;
try
{
// 2. Open the connection
conn.Open();
// 3. Pass the connection to a command object
//SqlCommand cmd = new SqlCommand("select * from Customers", conn);
SqlCommand cmd=new SqlCommand ("insert into time(project,iteration)
values('"+this .name1 .SelectedValue +"','"+this .iteration .SelectedValue +"')");
//
// 4. Use the connection
//
// get query results
rdr = cmd.ExecuteReader();
// print the CustomerID of each record
while (rdr.Read())
{
Console.WriteLine(rdr[0]);
}
}
finally
{
// close the reader
if (rdr != null)
{
rdr.Close();
}
// 5. Close the connection
if (conn != null)
{
conn.Close();
}
}
}
}
}
これを使用して、接続オブジェクトを渡します。
SqlCommand cmd=new SqlCommand ("insert into time(project,iteration)values('"+this .name1 .SelectedValue +"','"+this .iteration .SelectedValue +"')",conn);
SqlCommand cmd=new SqlCommand ("insert into time(project,iteration)values('....
追加後
cmd.Connection = conn;
この助けを願っています
次のように、コマンドオブジェクトに接続を割り当てる必要があります。
SqlCommand cmd=new SqlCommand ("insert into time(project,iteration)values('"+this .name1 .SelectedValue +"','"+this .iteration .SelectedValue +"')");
cmd.Connection = conn;
これを書くこともできます:
SqlCommand cmd=new SqlCommand ("insert into time(project,iteration) values (@project, @iteration)", conn);
cmd.Parameters.AddWithValue("@project",name1.SelectedValue);
cmd.Parameters.AddWithValue("@iteration",iteration.SelectedValue);
答えはすべて真実です。これは別の方法です。そして私はこれが好き
SqlCommand cmd = conn.CreateCommand()
文字列concatにはSQLインジェクションの問題があることに注意する必要があります。パラメーターを使用します http://msdn.Microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.parameters.aspx
前述のように、接続を割り当てる必要があり、できれば代わりにsqlパラメーターも使用する必要があります。したがって、コマンドの割り当ては次のようになります。
// 3. Pass the connection to a command object
SqlCommand cmd=new SqlCommand ("insert into time(project,iteration) values (@project, @iteration)", conn); // ", conn)" added
cmd.Parameters.Add("project", System.Data.SqlDbType.NVarChar).Value = this.name1.SelectedValue;
cmd.Parameters.Add("iteration", System.Data.SqlDbType.NVarChar).Value = this.name1.SelectedValue;
//
// 4. Use the connection
//
パラメーターを使用することで、SQLインジェクションやその他の問題のあるタイプミスを回避できます(「myproject's」などのプロジェクト名が例です)。
すべてのSQL接続をusing
ステートメントに配置するのが好きです。私は彼らがよりきれいに見えると思うし、あなたがそれらをやったときに彼らは彼ら自身の後をきれいにする。また、すべてのクエリをパラメーター化することをお勧めします。それは、はるかに安全であるだけでなく、戻って変更を加える必要がある場合の保守が容易です。
// create/open connection
using (SqlConnection conn = new SqlConnection("Data Source=Si-6\\SQLSERVER2005;Initial Catalog=rags;Integrated Security=SSPI")
{
try
{
conn.Open();
// initialize command
using (SqlCommand cmd = conn.CreateCommand())
{
// generate query with parameters
with cmd
{
.CommandType = CommandType.Text;
.CommandText = "insert into time(project,iteration) values(@name, @iteration)";
.Parameters.Add(new SqlParameter("@name", this.name1.SelectedValue));
.Parameters.Add(new SqlParameter("@iteration", this.iteration.SelectedValue));
.ExecuteNonQuery();
}
}
}
catch (Exception)
{
//throw;
}
finally
{
if (conn != null && conn.State == ConnectionState.Open)
{
conn.Close;
}
}
}