插入语句SQL C#中的语法错误

时间:2015-04-24 06:18:16

标签: c# oledb

我遇到df.ExecuteNonQuery();声称插入语句有SQL错误的问题。我不确定为什么程序的其他部分正在使用Insert语句,但学生只是拒绝工作。
数据库:http://puu.sh/hoTCv/c1ccb77551.png

OleDbCommand df = new OleDbCommand("INSERT into Students(ID,Password,FirstName,LastName,Street,City,State,Zip,EMail,GPA)" + "VALUES (?,?,?,?,?,?,?,?,?,?)", db);
//creating parameters
df.Parameters.AddWithValue("@ID", iDText.Text);
df.Parameters.AddWithValue("@Password", PassText.Text);
df.Parameters.AddWithValue("@FirstName", fnText.Text);
df.Parameters.AddWithValue("@LastName", LnText.Text);
df.Parameters.AddWithValue("@Street", StreetText.Text);
df.Parameters.AddWithValue("@City", CityText.Text);
df.Parameters.AddWithValue("@State", StateText.Text);
df.Parameters.AddWithValue("@Zip", ZipText.Text);
df.Parameters.AddWithValue("@EMail", EmailText.Text);
df.Parameters.AddWithValue("@GPA", GPAText.Text);
df.ExecuteNonQuery();
db.Close();

3 个答案:

答案 0 :(得分:1)

Password是Microsoft OLE DB提供程序中的reserved keyword。您需要使用方括号,例如[Password]。最佳做法是将列名更改为非保留字。

也不要使用AddWithValue方法。 It may generate unexpected results。使用.Add()重载来指定OleDbType和参数大小。

最好使用using statement自动处理您的OleDbConnectionOleDbCommand,而不是手动调用.Close().Dispose()方法。

答案 1 :(得分:0)

可以这样:

INSERT into Students(ID,Password ....

对此:

INSERT into Students(ID,[Password] ....

答案 2 :(得分:0)

Password是保留关键字。像[Password]

一样包装您的密码
  

Microsoft SQL Server使用保留关键字进行定义,   操纵和访问数据库。保留关键字是其中一部分   SQL Server使用的Transact-SQL语言的语法   解析并理解Transact-SQL语句和批处理。虽然它   在语法上可以使用SQL Server保留关键字作为   Transact-SQL脚本中的标识符和对象名称,您可以执行此操作   只能使用分隔标识符。