首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >oledbcommand ExecuteNonQuery不会更新

oledbcommand ExecuteNonQuery不会更新
EN

Stack Overflow用户
提问于 2016-06-05 17:52:04
回答 1查看 940关注 0票数 1

我有以下代码,它根据字符串字段和日期进行选择,如果返回任何内容,则尝试执行更新。select返回一些内容,但是当我进行更新时,变量“受影响”被设置为零,这可能是因为日期吗?当我检查我的日期变量时,它被设置为{02/06/2016 13:10:00},所以它有一个时间分量。

代码语言:javascript
复制
//  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();
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-05 19:19:07

Access/OleDB不使用这样的命名参数,它们只是位置占位符。因此,您必须按照SQL中列出的确切顺序提供参数值。您的代码与其他推荐的修补程序类似:

代码语言:javascript
复制
string sql = @"UPDATE MyTable SET HS=@HS WHERE Md = @MD AND HT=@HT";

using (OleDbConnection dbcon = new OleDbConnection(AceConnStr))
{ 
    // other code
    using (OleDbCommand cmd = new OleDbCommand(sql, dbcon))
    { 
        // add in the same order as in SQL
        // I have no idea that these are
        cmd.Parameters.Add("@HS", OleDbType.VarChar).Value = Hs;
        cmd.Parameters.Add("@MD", OleDbType.Date).Value = Md;
        cmd.Parameters.Add("@HT", OleDbType.Integer).Value = Ht;
        int rows = cmd.ExecuteNonQuery();

    }   // closes and disposes of connection and command objects
}

在用户试图手动插入循环的资源耗尽的情况下,不处理应该被视为in this question的东西的结果。

您也不需要创建一个DataAdapter (或DataSet)来填充一个表‘您可以使用一个DataReader来做同样的事情。

代码语言:javascript
复制
myDT.Load(cmd.ExecuteReader());
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37645004

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档