OleDb更新查询未更新数据库

时间:2019-11-12 22:19:06

标签: c# sql oledb oledbcommand

我正在尝试更新UID匹配的数据库中的4列,查询运行良好,没有错误输出,但是数据库保持不变。数据库已完全关闭,除代码外没有其他任何打开的数据库。我对在代码中使用数据库很陌生,因此完全迷失了在此处查找错误的机会。

更新查询代码如下:

conn.Open();
OleDbCommand UpdateUserCMD = new OleDbCommand("Update Accounts_Info Set Unique_ID=@Unique_ID, Last_Login_Date=@Last_Login_Date, Last_IP=@Last_IP, Last_MAC=@Last_MAC" + " Where Unique_ID=@Unique_ID", conn);
UpdateUserCMD.Parameters.AddWithValue("@Last_Login_Date", DateTime.Now.ToString("yyyy.MM.dd_hh:mm:ss"));
UpdateUserCMD.Parameters.AddWithValue("@Last_IP", GetIPAddress(Dns.GetHostName()).ToString());
UpdateUserCMD.Parameters.AddWithValue("@Last_MAC", GetMACAddress());
UpdateUserCMD.Parameters.AddWithValue("@Unique_ID", TempGUIDHolder);
UpdateUserCMD.ExecuteNonQuery();
conn.Close();

连接字符串如下:

OleDbConnection conn = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=E:/A-Level/Development/A_Level_AI_Project/A_Level_AI_Project/resources/Accounts.accdb");

其他查询的工作正常,因此我不认为其连接字符串有问题。

1 个答案:

答案 0 :(得分:0)

我认为您应该删除更新查询中设置唯一ID的部分

Update Accounts_Info Set Unique_ID=@Unique_ID, Last_Login_Date ...
                         ^^^^^^^^^^^^^^^^
                         don't put this in

原因我之所以这样说,是因为我几乎可以确定OLE不支持命名参数,即使您已经编写了它们,并且对于其他查询它似乎也可以工作。 OLE仅支持位置参数,因此AddWithValue调用的顺序必须与查询中参数出现的顺序匹配

因为您的查询包含一个额外的Uniqueid参数(即您称为AddWithValue的顺序),所以请确保将您的logindate分配给uid,将ip分配给登录日期,将mac分配给ip。它实际上不应运行,因为没有为第5个参数提供值。

如果您无法理解我的意思,请将查询中的所有@parameter名称更改为?

整理完参数后,捕获ExecuteNonQuery的返回值,它将告诉您受影响的记录数。如果为0,则where子句不匹配;否则,不匹配。再次检查tempGuidHolder中的值是否出现在表中

如果您正在捕获并吞下一个异常(并且我相信此代码会导致异常,因为并非所有参数都已填写),请不要;)