将数组插入SQL Server数据库问题

时间:2011-06-15 11:50:32

标签: c# sql-server arrays insert

我正在尝试将数组插入SQL Server数据库。在收到错误之前,将1/4复制到数据库:

  

's'附近的语法不正确。未关闭的   字符后的引号   string',')'。

这是按钮点击事件 -

private void button3_Click(object sender, EventArgs e)
{
   SqlConnection sql = new SqlConnection("server=localhost; uid=xxxx; pwd=xxxx; database=Movies;");
   sql.Open();

   for (int i = 0; i < jointArray.Length; i++)
   {
      SqlCommand command = new SqlCommand("insert into [" + folderName + "] " + "values('" + jointArray[i].ToString() +"', '')", sql);
      command.ExecuteNonQuery();
   }

   sql.Close();
}

6 个答案:

答案 0 :(得分:4)

我猜想通过jointArray [i] .ToString()的1/4包含撇号。

因此,而不是看起来像这样的SQL查询..

insert into [MyFolder] values('MyValue')

你最终会看到像这样的东西

insert into [MyFolder] values('MyValue's')

导致错误(注意s附近的语法不正确!)

请考虑在SQLCommand中使用参数(查找Parameters.AddParameters.AddWithValue)。

使用参数制作代码

  • 更易阅读
  • 易于调试
  • 不太容易受到SQL注入攻击(最近索尼图片被攻击)

答案 1 :(得分:3)

看起来您的数据可能包含撇号,这会弄乱您的查询。

这是一个非常糟糕的方法。除非您可以保证您的数据不会有任何意外字符,否则您应该至少使用SQL参数来确保它们被正确解释。

答案 2 :(得分:2)

您的某个数组元素很可能包含撇号。

答案 3 :(得分:2)

问题是您没有正确编码字符串以成为SQL中的字符串文字。当字符串中有撇号时,它将破坏语法。

您应该使用参数而不是将字符串连接到SQL代码中。

这也允许您为所有查询重用相同的查询和命令对象,而不是为每个查询创建新命令。您还可以在循环之前在命令上调用Prepare,以减少每次执行的一些开销。

示例:

private void button3_Click(object sender, EventArgs e) {

  using (SqlConnection sql = new SqlConnection("server=localhost; uid=xxxx; pwd=xxxx; database=Movies;")) {
    sql.Open();

    using (SqlCommand command = new SqlCommand("insert into [" + folderName + "] values(@P, '')", sql) {

      SqlParameter param = command.Parameters.Add("@P", SqlDbType.VarChar, 50);
      command.Prepare();

      for (int i = 0; i < jointArray.Length; i++) {
        param.Value = jointArray[i].ToString();
        command.ExecuteNonQuery();
      }

    }
  }
}

答案 4 :(得分:1)

签出'

等SQL转义字符

答案 5 :(得分:1)

在你的价值观的某个地方你有一个未转义的单引号。这样的问题应该快速修复它。

SqlCommand command = new SqlCommand("insert into [" + folderName + "] " + "values('" + jointArray[i].ToString().Replace("'", "''") +"', '')", sql);

修改 糟糕,粘贴错误!粘贴你的东西。