我在下面有这段代码,它应该将数据从 datagridview dtg_ksluzby 保存到 sql 表 KLISLUZ
,但它说:
Embedded statement cannot be declarition or labeled statemnt.
for(int i=0; i< dtg_ksluzby.Rows.Count;i++)
SqlCommand prikaz2 = new SqlCommand("INSERT INTO klisluz'" + dtg_ksluzby.Rows[i].Cells["text"].Value +"', '" + dtg_ksluzby.Rows[i].Cells["pocet"].Value +"'",spojeni);
prikaz2.ExecuteNonQuery();
首先,您应该始终使用parameterized queries , 这种字符串连接对 SQL Injection 开放攻击。
这样试试;
for(int i=0; i< dtg_ksluzby.Rows.Count;i++)
{
using(SqlCommand prikaz2 = new SqlCommand("INSERT INTO klisluz VALUES(@p1, @p2)",spojeni))
{
prikaz2.Parameters.AddWithValue("@p1", dtg_ksluzby.Rows[i].Cells["text"].Value);
prikaz2.Parameters.AddWithValue("@p2", dtg_ksluzby.Rows[i].Cells["pocet"].Value);
prikaz2.ExecuteNonQuery();
}
}
作为替代,蒂姆pointed ,您可以为您只需要使用 SqlParameterCollection.Clear()
的所有值重用相同的 SqlCommand
执行命令后的方法。
喜欢;
using(SqlCommand prikaz2 = new SqlCommand("INSERT INTO klisluz VALUES(@p1, @p2)",spojeni))
{
for(int i=0; i< dtg_ksluzby.Rows.Count;i++)
{
prikaz2.Parameters.AddWithValue("@p1", dtg_ksluzby.Rows[i].Cells["text"].Value);
prikaz2.Parameters.AddWithValue("@p2", dtg_ksluzby.Rows[i].Cells["pocet"].Value);
prikaz2.ExecuteNonQuery();
prikaz2.Parameters.Clear();
}
}
我是一名优秀的程序员,十分优秀!