SqlClient.SqlException - 附近的语法不正确

SqlClient.SqlException - Incorrect syntax near

我有一个 .csv 文件,我想在 SQL 服务器中使用 IronPython 中的 SqlClient 将其写入 myTable table。 一切正常,直到我迭代并尝试从 .cvs.

中写入值
import clr, sys, os
sys.path.append(r'C:\Program Files (x86)\IronPython 2.7\Lib')
clr.AddReference('System.Data')
from System.Data import*
mySqlConnection = SqlClient.SqlConnection("server=XXX;database=XXX;uid=XXX;password=XXX")

如果我使用 "static" 方法,它运行良好:

mySqlConnection.Open()
myCommand = SqlCommand("INSERT INTO myTable VALUES ('Alpha', 'Beta', 'Gamma')", mySqlConnection)
myCommand.ExecuteNonQuery()
mySqlConnection.Close()

但是,当我遍历 .csv 数据时,我 运行 遇到了语法问题:

myCsvData = [list(i) for i in csv.reader(file(myCsvFile))]

mySqlConnection.Open()
for i in myCsvData:
 myCommand = SqlCommand("INSERT INTO myTable VALUES (i[0], i[1], i[2]))", mySqlConnection)
 myCommand.ExecuteNonQuery()
mySqlConnection.Close()

此时我得到:"Incorrect syntax near 0 " 我在这里阅读了几个讨论,但我仍然无法找出正确的格式。 感谢您的帮助!

一方面,您的查询中有 2 个“)”,但只有一个“(”,如果不能解决问题,请尝试在查询末尾添加一个“;”。

如果这仍然无效,请尝试逐步完成对变量的简单赋值,并在每一步检查变量的值(或打印它)

for i in myCsvData:
 sTest = "INSERT INTO myTable VALUES ({0}, '{1}', {2});".format(i[0],i[1],i[2])

可能发生的一件事是您没有在字符串值周围加上引号。即如果 i[1] 是一个字符串并且 i[0] 和 i[2] 是整数,它看起来更像这样

sTest = "INSERT INTO myTable VALUES ({0}, '{1}', {2});".format(i[0],i[1],i[2])

日期也需要用引号括起来。

编辑:我不熟悉 IronPython,我认为 Python 的格式是正确的,SQL 是问题所在,尝试一些组合,例如 [=14] =]

"INSERT INTO myTable VALUES ({0}, '{1}', {2});".format(i[0],i[1],i[2])

"INSERT INTO myTable VALUES (%s, '%s', %s);" % (i[0],i[1],i[2])

并验证结果以确保它看起来像 SQL,其中包含值。

我猜你需要参数化你的查询

mySqlConnection.Open()
for i in myCsvData:
 myCommand = SqlCommand("INSERT INTO myTable VALUES (@p0, @p1, @p2))", mySqlConnection)
 myCommand.Parameters.AddWithValue("@p0", i[0])
 myCommand.Parameters.AddWithValue("@p1", i[1])
 myCommand.Parameters.AddWithValue("@p2", i[2])
 myCommand.ExecuteNonQuery()
mySqlConnection.Close()