我正在尝试将数组插入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();
}
答案 0 :(得分:4)
我猜想通过jointArray [i] .ToString()的1/4包含撇号。
因此,而不是看起来像这样的SQL查询..
insert into [MyFolder] values('MyValue')
你最终会看到像这样的东西
insert into [MyFolder] values('MyValue's')
导致错误(注意s附近的语法不正确!)
请考虑在SQLCommand中使用参数(查找Parameters.Add
和Parameters.AddWithValue
)。
使用参数制作代码
答案 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)
签出'
答案 5 :(得分:1)
在你的价值观的某个地方你有一个未转义的单引号。这样的问题应该快速修复它。
SqlCommand command = new SqlCommand("insert into [" + folderName + "] " + "values('" + jointArray[i].ToString().Replace("'", "''") +"', '')", sql);
修改强> 糟糕,粘贴错误!粘贴你的东西。