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

DataTable批量更新中,执行到dr.SetModified()跳出问题。
我是想用ListBox调整好菜单顺序,后将index作为排序,批量更新到数据库中。
本来想着用法应该没什么问题,调试发现dr.SetModified()一执行就跳出。
datatable数据段(数据来自ListBox):
DataTable dt = new DataTable("T_Nav_1");
            dt.Columns.Add(new DataColumn("Nav_1_id", typeof(Int32)));
            //dt.Columns.Add(new DataColumn("Nav_1_Name", typeof(System.String)));
            dt.Columns.Add(new DataColumn("NavOrder", typeof(Int32)));

            for (int i=0; i < ListBox1.Items.Count; i++)
            {
                dt.Rows.Add(new object[] { ListBox1.Items[i].Value, i });//ListBox1.Items[i].Text,
            }
            int n = Update(dt);


想用 标识行为已修改状态,直接更新DataTable, 感觉用 Fill填充后再修改里面的数据再更新太绕。
Update方法段:执行到dr.SetModified();直接跳至catch内。

public int Update(DataTable dt)
        {
            int res = 0;
            dt.PrimaryKey = new DataColumn[] { dt.Columns["Nav_1_id"] };
            using (SqlConnection sqlconn = new SqlConnection(DBUtility.PubConstant.ConnectionString))
            {
                sqlconn.Open();
                //事务 
                SqlTransaction tran = sqlconn.BeginTransaction(IsolationLevel.ReadCommitted);
                try
                {
                    foreach (DataRow dr in dt.Rows)
                    {
                        //所有行设为修改状态   
                        dr.SetModified();
                    }
                    //为Adapter定位目标表 
                    SqlCommand cmd = new SqlCommand("select * from [T_Nav_1] where 1=0", sq