我的存储过程之前可以正常运行。但是现在,当我尝试运行它时,我得到了以下错误消息:“消息105,级别15,状态1,第84行 字符串'BDR_POST-BI(SCT')后的引号引起来。 消息102,第15层,州1,第84行 'BDR_POST-BI(SCT'。“附近的语法不正确。”这是我的存储过程
require_once '../AutoLoader.php';
require '../app/views/student/List.php';
答案 0 :(得分:1)
将数据插入数据库时,请考虑使用SQL parameters来避免SQL injection:
cmd.Parameters.Add("@line", SqlDbType.VarChar).Value = line
我还将考虑实施Using:
有时,您的代码需要不受管的资源,例如文件句柄,COM包装程序或SQL连接。使用代码块可以保证在您的代码完成后,处置一个或多个此类资源。这使它们可供其他代码使用。
Using con As New SqlConnection(str),
cmd As New SqlCommand("INSERT INTO table2 ([a], [roll], [c]) VALUES (1, 2, @line)", con)
cmd.Parameters.Add("@line", SqlDbType.VarChar).Value = line
con.Open()
cmd.ExecuteNonQuery()
End Using
我还将考虑遍历Using
语句中的文件,以免一遍又一遍地创建SQL对象:
Using con As New SqlConnection(str),
cmd As New SqlCommand("INSERT INTO table2 ([a], [roll], [c]) VALUES (1, 2, @line)", con)
cmd.Parameters.Add("@line", SqlDbType.VarChar)
con.Open()
Using sr As New StreamReader(path)
Do While sr.Peek() >= 0
cmd.Parameters("@line").Value = sr.ReadLine
cmd.ExecuteNonQuery()
Loop
End Using
End Using
End Sub
此代码未经测试,我没有环境,但是它应该给您一些使用的东西。
答案 1 :(得分:0)
line的值是什么?
尝试
cmd = New SqlCommand("insert into table2 ([a], [roll],[c]) values (1, 2, '''" & line & "''')", con)
答案 2 :(得分:0)
一定要使用参数。检查数据库以获取正确的“ SqlDbType”
Dim cmd As New SqlCommand(("insert into table2 ([a], [roll],[c]) values (1, 2, @line);", con))
cmd.Parameters.Add("@line", SqlDbType.VarChar).Value = line