我下面有这段代码,应该将数据从datagridview dtg_ksluzby保存到sql表KLISLUZ
,但是它说:
嵌入式语句不能为声明或标记为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();
}
}
作为Tim pointed的替代方法,您可以在执行命令后为所有只需要使用
SqlCommand
方法的值重用相同的SqlParameterCollection.Clear()
。喜欢;
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();
}
}
关于c# - 从Datagridview到SQL DB表的SqlCommand INSERT INTO,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17698884/