我遇到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();
答案 0 :(得分:1)
Password
是Microsoft OLE DB提供程序中的reserved keyword。您需要使用方括号,例如[Password]
。最佳做法是将列名更改为非保留字。
也不要使用AddWithValue
方法。 It may generate unexpected results。使用.Add()
重载来指定OleDbType
和参数大小。
最好使用using
statement自动处理您的OleDbConnection
和OleDbCommand
,而不是手动调用.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脚本中的标识符和对象名称,您可以执行此操作 只能使用分隔标识符。