我想读取某个表中的一些内容,并且将读取过的记录的status字段标记为9。用下面的代码执行时,程序会一直卡住不结束,卡在adapter.Update(dtMytable);这一句。
虽然程序一直卡着,但进数据库以后发现实际上字段已经全部被修改了。请问我的代码是不是哪里写的有问题呢?string strSql = "select * from test where d_type=4 and d_status<>0 order by d_id";
DataSet ds = new DataSet();
string connstr = "data source = 127.0.0.1; initial catalog = test; user id = test; Password = test";
SqlConnection conn = new SqlConnection(connstr);
conn.Open();
SqlDataAdapter dapter = new SqlDataAdapter(strSql, conn);
adapter.Fill(ds);
dtMytable = ds.Tables[0];
adapter.UpdateCommand = new SqlCommand("update test set d_status=@d_status where d_type=@d_type and d_status<>0", conn);
adapter.UpdateCommand.Parameters.Add("@d_status", SqlDbType.Float, 8, "d_status");
adapter.UpdateCommand.Parameters.Add("@d_type", SqlDbType.Float, 8, "d_type");
adapter.UpdateCommand.UpdatedRowSource = UpdateRowSource.None;
string strName = "";
StringBuilder sbTmp = new StringBuilder();
for (int i = 0; i < dtMytable.Rows.Count; i++)
{
    strName = dtMytable.Rows[i]["d_name"].ToString();
    sbTmp.AppendLine(strName);
    dtMytable.Rows[i].BeginEdit();
    dtMytable.Rows[i]["d_status"] = 9;
    dtMytable.Rows[i].EndEdit();
}
adapter.Update(dtMytable);
conn.Close();

解决方案 »

  1.   

    看到这个头疼 没用过SqlAdapter的Update功能。。自己写个吧
      

  2.   

    看起来没有问题。除了第六行:
    SqlDataAdapter dapter = new SqlDataAdapter(strSql, conn);
    dapter拼写错误,掉了个a
      

  3.   

      是掉了个a,应该会有错误提示阿?编译会有错误阿
      SqlDataAdapter adapter = new SqlDataAdapter(strSql, conn);
      adapter.Fill(ds);
      

  4.   

    是不是数据量比较大,运行程序,按break按钮,看看停在哪一行。
      

  5.   


    你想要达到什么目的,不能一update语句里一次性完成吗?为何还要放到循环再更新?最好是一次性在update语句里完成
      

  6.   


    他这个循环好像是获取每一行数据中@d_type 和 @d_status的值。
    真正更新数据的语句是adapter.UpdateCommand = new SqlCommand("update test set d_status=@d_status where d_type=@d_type and d_status<>0", conn);
    没在循环里。
    但我觉得问题好像就在这,把这个更新语句放在循环里呢?
      

  7.   

    我现在要做的操作是这样:
    表里有两个字段record和status,我需要读取每条记录的record字段内容,用它的值去一个接口查询出status结果,然后更新这条记录的status。接口查询是有时间间隔的,我不想频繁的操作数据库或者一直打开连接,所以是先读取100条,查完以后全部更新到数据库里,再读下个100条,现在更新时遇到了我上面描述的问题。