System.Data.OleDb.OleDbException: UPDATE 语句的语法错误。
private void Update_Contacts(){
string strConnection = "Provider = Microsoft.Jet.OleDb.4.0; Data Source = " + Server.MapPath("./");
strConnection += @"Database.mdb";
OleDbConnection objConnection = new OleDbConnection(strConnection);
objConnection.Open();
string sqlQuery = "Select * From [Contacts] Where [PIN] = '" + Request["PIN"] + "'";
DataSet objDataSet = new DataSet();
OleDbDataAdapter objDataAdapter = new OleDbDataAdapter(sqlQuery, objConnection);
OleDbCommandBuilder objCommandBuilder = new OleDbCommandBuilder(objDataAdapter);
objDataAdapter.Fill(objDataSet, "Contacts");
objDataSet.Tables["Contacts"].Rows[0]["Name(ENG)"] = Request["Name(ENG)"];
objDataSet.Tables["Contacts"].Rows[0]["Cell Phone"] = Request["Cell_Phone"];
objDataSet.Tables["Contacts"].Rows[0]["Backup Phone"] = Request["Backup_Phone"];
objDataSet.Tables["Contacts"].Rows[0]["Location"] = Request["Location"];
objDataSet.Tables["Contacts"].Rows[0]["Notes"] = Request["Notes"];
objDataAdapter.Update(objDataSet, "Contacts");
objConnection.Close();
}
“/”应用程序中的服务器错误。
--------------------------------------------------------------------------------
UPDATE 语句的语法错误。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。
异常详细信息: System.Data.OleDb.OleDbException: UPDATE 语句的语法错误。
源错误:
行 115: objDataSet.Tables["Contacts"].Rows[0]["Location"] = Request["Location"];
行 116: objDataSet.Tables["Contacts"].Rows[0]["Notes"] = Request["Notes"];
行 117: objDataAdapter.Update(objDataSet, "Contacts");
行 118: objConnection.Close();
前来请教大家!谢谢! --------------------编程问答-------------------- 怀疑Request["PIN"]获取的字符串导致了SQL语句语法错误。 --------------------编程问答-------------------- 错误点:
Request["xxx"] --------------------编程问答-------------------- 使用
objAdapter.Parameters.Add("@authcode", Int, 11, "authcode")这种类型.
你的语法错了. --------------------编程问答-------------------- 请问该怎样修改呢? --------------------编程问答-------------------- 试过了,将 Request["PIN"] 更改为另外的常量还是不行。把 Where 的查询条件从 PIN 换成 ID 等都不行。 --------------------编程问答-------------------- 写错了.
OleDbCommandBuilder yourcommand = new OleDbCommandBuilder("update Authority set authcode = @authcode", Myconnection);
cmddel.Parameters.Add("@authcode", OdbcType.Int, 11, "authcode");
或objDataSet.Tables["Contacts"].Rows[0]["Name(ENG)"] = "+Name(ENG)+"; --------------------编程问答-------------------- 你原代码request里的东西是控件名吧? --------------------编程问答-------------------- asp.net我也不是太熟,提供一个思路吧.
打上断点,在Update前检查一下adapter的sql语句是否正确,然后检查你赋值的类型是否符合要求 --------------------编程问答-------------------- 你这上路径的问题吧,检查下路径 --------------------编程问答-------------------- 问题找到了:
当调用 Update 方法时,DataAdapter 将分析已作出的更改并执行相应的命令(INSERT、UPDATE 或 DELETE)。当 DataAdapter 遇到对 DataRow 的更改时,它将使用 InsertCommand、UpdateCommand 或 DeleteCommand 来处理该更改。这样,您就可以通过在设计时指定命令语法并在可能时通过使用存储过程来尽量提高 ADO.NET 应用程序的性能。在调用 Update 之前,必须显式设置这些命令。如果调用了 Update 但不存在用于特定更新的相应命令(例如,不存在用于已删除行的 DeleteCommand),则将引发异常。
--------------------编程问答--------------------
// Assumes connection is a valid SqlConnection.
SqlDataAdapter dataAdpater = new SqlDataAdapter(
"SELECT CategoryID, CategoryName FROM Categories", connection);
dataAdpater.UpdateCommand = new SqlCommand(
"UPDATE Categories SET CategoryName = @CategoryName " +
"WHERE CategoryID = @CategoryID" , connection);
dataAdpater.UpdateCommand.Parameters.Add(
"@CategoryName", SqlDbType.NVarChar, 15, "CategoryName");
SqlParameter parameter = dataAdpater.UpdateCommand.Parameters.Add(
"@CategoryID", SqlDbType.Int);
parameter.SourceColumn = "CategoryID";
parameter.SourceVersion = DataRowVersion.Original;
DataSet dataSet = new DataSet();
dataAdpater.Fill(dataSet, "Categories");
DataRow row = dataSet.Tables["Categories"].Rows[0];
row ["CategoryName"] = "New Category";
dataAdpater.Update(dataSet, "Categories");
--------------------编程问答-------------------- 从你的代码中看,你是想更新数据库的第一条记录的值(不是删除,也不是插入,从你的代码中看),你上面显示定义了select命令,但是没有显示定义update命令. --------------------编程问答-------------------- 还有你的语法极不规范,request是干什么的,究竟想做什么??? --------------------编程问答-------------------- 调试成功贴上代码,并把错误原因及中间不断解决的过程公布给大家,以飨读者,呵呵.
THX :-) --------------------编程问答-------------------- 结题:Name(ENG) 被识别成函数了,Update 之所以报错,就是说缺少 Name 函数的定义。其他的没有任何问题。
感谢 Only_Endure 的热心帮助!
补充:.NET技术 , ASP.NET