C# SqlCommand插入到从datagridview到SQL DB表中

C# SqlCommand插入到从datagridview到SQL DB表中,c#,sql,sql-server,C#,Sql,Sql Server,下面的代码应该将数据从datagridview dtg_kslugby保存到sql表KLISLUZ,但是它说: 嵌入语句不能是declariation或标记为statemnt for(int i=0;i

下面的代码应该将数据从datagridview dtg_kslugby保存到sql表
KLISLUZ
,但是它说:

嵌入语句不能是declariation或标记为statemnt

for(int i=0;i
首先,您应该始终使用,这种字符串连接是容易受到攻击的

像这样尝试

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();
    }
}

首先,您应该始终使用,这种字符串连接对攻击是开放的

像这样尝试

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();
    }
}
您的查询错误(也使用
参数化查询

固定查询:

"INSERT INTO klisluz values('" + dtg_ksluzby.Rows[i].Cells["text"].Value +"', '" + dtg_ksluzby.Rows[i].Cells["pocet"].Value +"')"
固定代码:

using (SqlCommand prikaz2 = new SqlCommand("INSERT INTO klisluz values('@val1', '@val2')",spojeni))
{
  for (int i = 0; i < dtg_ksluzby.Rows.Count; i++)
  {
    prikaz2.Parameters.Clear();
    prikaz2.Parameters.AddWithValue("@val1", dtg_ksluzby.Rows[i].Cells["text"].Value);
    prikaz2.Parameters.AddWithValue("@val2", dtg_ksluzby.Rows[i].Cells["pocet"].Value);
    prikaz2.ExecuteNonQuery();
  }
}
使用(SqlCommand prikaz2=newsqlcommand(“插入klisluz值('@val1','@val2'),spojeni))
{
对于(int i=0;i
您的查询是错误的(也使用
参数化查询

固定查询:

"INSERT INTO klisluz values('" + dtg_ksluzby.Rows[i].Cells["text"].Value +"', '" + dtg_ksluzby.Rows[i].Cells["pocet"].Value +"')"
固定代码:

using (SqlCommand prikaz2 = new SqlCommand("INSERT INTO klisluz values('@val1', '@val2')",spojeni))
{
  for (int i = 0; i < dtg_ksluzby.Rows.Count; i++)
  {
    prikaz2.Parameters.Clear();
    prikaz2.Parameters.AddWithValue("@val1", dtg_ksluzby.Rows[i].Cells["text"].Value);
    prikaz2.Parameters.AddWithValue("@val2", dtg_ksluzby.Rows[i].Cells["pocet"].Value);
    prikaz2.ExecuteNonQuery();
  }
}
使用(SqlCommand prikaz2=newsqlcommand(“插入klisluz值('@val1','@val2'),spojeni))
{
对于(int i=0;i
您可以进行sql注入。使用参数。您可以进行sql注入。使用参数+1。。。或者重新使用相同的
SqlCommand
并调用
prikaz2.Parameters.Clear
。@TimSchmelter谢谢Tim。加上我的答案+1。。。或者重新使用相同的
SqlCommand
并调用
prikaz2.Parameters.Clear
。@TimSchmelter谢谢Tim。添加到我的答案中。我修复了他的查询并演示了如何正确使用参数,他的循环没有问题,但我认为最好完全回答:)我修复了他的查询并演示了如何正确使用参数,他的循环没有问题,但我认为最好完全回答:)