日期:2014-05-17  浏览次数:21083 次

用C#直接写Transaction的问题
winform + sql2005

            //以下是事务设置
            SqlConnection Conn = dba.GetConn();
            Conn.Open();
            SqlTransaction sqlTrans = Conn.BeginTransaction();
            SqlCommand sqlComm = Conn.CreateCommand();
            sqlComm.Connection = Conn;
            sqlComm.Transaction = sqlTrans;
            try
            {
                for (int i = 0; i <arrayList.Count; i++)
                {
                    string strID = arrayList[i].ToString();

                    sqlComm.CommandText = "Update Booktable set ID = '"+ strID +"' Where book_ID = '200'";
                    sqlComm.ExecuteNonQuery();
                }

                sqlTrans.Commit();
            }


用上述事务语句直行循环更新字段
strID在循环里是不同的值(调试的时候可观测到)
但是Commit后发现数据库更新的数据都是最后一个arrayList[i]的值

请问这是怎么回事?
c# 数据库 sql

------解决方案--------------------
Update Booktable set ID = '"+ strID +"' Where book_ID = '200'
每次执行都将ID更新为strID,最后当然是最后那个值了啊
------解决方案--------------------
你只更新了book_ID = '200'的ID,看下你where后的条件。。。
------解决方案--------------------
book_ID = '200'
你每次更新的都是这条记录啊。更新完了又更新一次。那肯定是最后一个数据保留了。