【发布时间】:2016-06-05 17:52:04
【问题描述】:
我有以下代码,它根据字符串字段和日期进行选择,如果它返回任何内容,那么它会尝试进行更新。选择返回一些东西,但是当我进行更新时,变量“受影响”设置为零,这可能是因为日期吗?当我检查它时,我的日期变量设置为(英国格式){02/06/2016 13:10:00},所以它确实有一个时间组件。
// DateTime Md, string ht = these are set at this point
var conn = new OleDbConnection();
conn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\MyPath\\MyDb.accdb";
conn.Open();
var cmdSel = conn.CreateCommand();
cmdSel.CommandText = @"SELECT * FROM MyTable WHERE Md = @MD AND HT=@HT";
cmdSel.Parameters.AddWithValue("@MD", Md);
cmdSel.Parameters.AddWithValue("@HT", ht);
var da = new OleDbDataAdapter(cmdSel);
var ds = new DataSet();
da.Fill(ds);
if (ds.Tables[0].Rows.Count > 0)
{
var cmd = conn.CreateCommand();
cmd.CommandText = @"UPDATE MyTable SET HS=@HS WHERE Md = @MD AND HT=@HT";
cmd.Parameters.AddWithValue("@MD", Md);
cmd.Parameters.AddWithValue("@HT", ht);
cmd.Parameters.AddWithValue("@HS", hs);
var affected = cmd.ExecuteNonQuery();
}
【问题讨论】:
-
您的访问权限是否更新?添加值后,您的更新命令是什么样的?您的列类型是什么?
-
您应该查看Can we stop using AddWithValue() already? 并停止使用
.AddWithValue()- 它可能会导致意想不到和令人惊讶的结果... -
也可以使用
using语句自动处理你的连接和命令。