我下面有这段代码,应该将数据从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/

10-08 21:14