为什么通过OleDb在Access数据库中调用我的更新查询不起作用?更新2:我解决了这个问题,请参阅我的回答。我正在使用OleDb从C#调用MicrosoftAccess数据库中的查询,但我无法使我的更新查询工作。不会抛出任何错误,但不会将更新保存在数据库中。任何人都可以阐明这一点吗?数据库中的SQL查询:UPDATEtableNameSETtableName.LastPolledDtg=LastPolledDtgWHEREtableName.key=ID;C#:OleDbCommand命令=newOleDbCommand();SetCommandType(命令,CommandType.StoredProcedure,“NameOfQueryInAccessDatabase”);AddParamToSQLCmd(command,"@ID",OleDbType.Integer,4,ParameterDirection.Input,id);AddParamToSQLCmd(命令,“@LastPolledDtg”,OleDbType.Date,4,ParameterDirection.Input,DateTime.Now);使用(OleDbConnectionconnection=newOleDbConnection("connectionString")){command.Connection=connection;connection.Open();结果=command.ExecuteNonQuery();}ConnectionString:"Provider=Microsoft.Jet.OLEDB.4.0;DataSource=C:\DocumentsandSettings\Administrator\Desktop\dev\src\Website\App_Data\tracking.mdb"更新1:我试图缩小范围通过创建一个具有单个表和单个查询的新数据库,并确保在运行C#时关闭以更新表访问来实现的可能性。尚未执行更新。我怀疑这是一个语法问题(也许是权限问题?),但没有任何错误消息,很难调试!刚刚解决了问题-这是参数的命名-似乎您不能将参数命名为与查询中的任何字段相同。更改查询:UPDATEtableNameSETtableName.LastPolledDtg=LastPolledDtgWHEREtableName.key=ID;到:UPDATEtableNameSETtableName.LastPolledDtg=LastPolledDtgArgWHEREtableName.key=ID;...并使用参数名称更改更新调用C#,将其写入数据库。然而,还有另一个烦人的问题:在C#中保持参数排序会导致数据库中的LastPolledDtg字段更新为最小日期(1899年或其他日期)。在将参数添加到OleDbCommand以匹配它们在SQL中的出现时,重新排序修复了此问题。所以C#应该是这样的:OleDbCommandcommand=newOleDbCommand();SetCommandType(命令,CommandType.StoredProcedure,“NameOfQueryInAccessDatabase”);AddParamToSQLCmd(命令,“@LastPolledDtgArg”,OleDbType.Date,4,ParameterDirection.Input,DateTime。现在);AddParamToSQLCmd(command,"@ID",OleDbType.Integer,4,ParameterDirection.Input,id);使用(OleDbConnectionconnection=newOleDbConnection("connectionString")){command.Connection=connection;connection.Open();结果=命令。执行非查询();伙计,我爱Access。您的更新查询有点混乱(您使用LastPolledDtg作为字段及其值)。如果您指的是定义列的参数,那么它将不起作用。否则,请尝试使用PARAMETER语法重写Access中的查询,例如:PARAMETERSLastPolledDtgArgText(255),IDLong;UPDATEtableNameSETtableName.LastPolledDtg=[LastPolledDtgArg]WHEREtableName.key=[ID];如果这不起作用,请尝试直接从C#使用SQL查询,而不是尝试执行存储的查询。还要对参数重新排序,以便它们按照查询中定义的顺序传递,以便LastPolledDtArg的值在ID之前传递。在ms-access中,参数的顺序必须与SQL语句的顺序相同。我不是Access编码员,但听起来可能正在使用隐式事务。这意味着当您执行数据修改命令时,会自动打开一个事务,该事务必须在您的代码中显式提交/回滚。由于某种原因,您的更新不会影响任何行。以上是C#学习教程:为什么通过OleDb在Access数据库中调用我的UPDATE查询不起作用?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
