当前位置:编程学习 > C#/ASP.NET >>

求助:如何直接构造dt,批量更新数据库


YingKe.Common.Accounts ac = new YingKe.Common.Accounts();
            DataTable dt = new DataTable();
            DataColumn myDataColumn;

            myDataColumn = new DataColumn();
            myDataColumn.DataType = Type.GetType("System.Int32");
            myDataColumn.ColumnName = "ID";
            myDataColumn.ReadOnly = true;
            myDataColumn.AllowDBNull = false;
            myDataColumn.Unique = true;
            myDataColumn.AutoIncrement = true;
            myDataColumn.AutoIncrementSeed = 1;
            myDataColumn.AutoIncrementStep = 1;
            dt.Columns.Add(myDataColumn);

            myDataColumn = new DataColumn();
            myDataColumn.DataType = Type.GetType("System.Int32");
            myDataColumn.ColumnName = "UID";
            myDataColumn.AllowDBNull = false;
            dt.Columns.Add(myDataColumn);

            myDataColumn = new DataColumn();
            myDataColumn.DataType = Type.GetType("System.Int32");
            myDataColumn.ColumnName = "RID";
            myDataColumn.AllowDBNull = false;
            dt.Columns.Add(myDataColumn);

            string[] _tmp = Request.Form["having_roles"].Split(',');
            for (int i = 0; i < _tmp.Length; i++)
            {
                DataRow dr = dt.NewRow();
                dr["UID"] = Convert.ToInt32(Request.QueryString["id"]);
                dr["RID"] = _tmp[i];
                dt.Rows.Add(dr);
            }

            if (ac.SetUserRoles(dt)>0)
            {
                ClientScript.RegisterStartupScript(this.GetType(), "", "<script language='javascript'>alert('操作成功!');window.location.href='Users.aspx';</script>");
            }
            else
            {
                ClientScript.RegisterStartupScript(this.GetType(), "", "<script language='javascript'>alert('更新失败或者您没有变更用户的已有角色!');</script>");
            }



public int SetUserRoles(DataTable dt)
        {
            SqlConnection conn = new SqlConnection(SqlHelper.ConnectionString);
            SqlCommand cmd = new SqlCommand("",conn);
            SqlDataAdapter da = new SqlDataAdapter(cmd);
            SqlCommandBuilder sb = new SqlCommandBuilder(da);
            return da.Update(dt);
        }







我要做到的是:直接构造一个dt,然后提交到数据库。但是总是绕不过“SelectCommand.Text 需要初始化这步”(需要先查询到dt,然后修改dt,再提交dt)。求助有没有好的解决办法。 --------------------编程问答--------------------  呵呵 你有没有想过? 你直接构造一个DT 提交到数据库 最终还是要一条条的 更新呀?
  你想以 一张表替换 数据库的一张表?你的想法很好  --------------------编程问答--------------------
引用 1 楼 lyvscf 的回复:
呵呵 你有没有想过? 你直接构造一个DT 提交到数据库 最终还是要一条条的 更新呀?
  你想以 一张表替换 数据库的一张表?你的想法很好


是避免不了一条一条更新,但是可以避免一次查询。我想要的就是避免这次查询。服务器资源有限,只能这么想办法了。 --------------------编程问答--------------------
引用 2 楼 qiqing2011 的回复:
引用 1 楼 lyvscf 的回复:
呵呵 你有没有想过? 你直接构造一个DT 提交到数据库 最终还是要一条条的 更新呀?
你想以 一张表替换 数据库的一张表?你的想法很好


是避免不了一条一条更新,但是可以避免一次查询。我想要的就是避免这次查询。服务器资源有限,只能这么想办法了。

那为什么不直接写sql语句进行update呢 --------------------编程问答-------------------- SqlCommand cmd = new SqlCommand("",conn);

这里要写 "select * from 表" 而且要执行一次Fill才能拿到表的Schema,才能生成其他的Command --------------------编程问答--------------------  那就在存储过程里面做吧 参数用数组传递 --------------------编程问答--------------------
引用 3 楼 ojlovecd 的回复:
引用 2 楼 qiqing2011 的回复:

引用 1 楼 lyvscf 的回复:
呵呵 你有没有想过? 你直接构造一个DT 提交到数据库 最终还是要一条条的 更新呀?
你想以 一张表替换 数据库的一张表?你的想法很好


是避免不了一条一条更新,但是可以避免一次查询。我想要的就是避免这次查询。服务器资源有限,只能这么想办法了。

那为什么不直接写sql语句进行update呢



除了update可能还有insert、delete,在不确定行数,不确定操作的情况下,逻辑代码是在太多,所以采用aso.net的自动更新功能 --------------------编程问答--------------------
引用 4 楼 fangxinggood 的回复:
SqlCommand cmd = new SqlCommand("",conn);

这里要写 "select * from 表" 而且要执行一次Fill才能拿到表的Schema,才能生成其他的Command


这位朋友请仔细看问题 --------------------编程问答--------------------
引用 7 楼 qiqing2011 的回复:
引用 4 楼 fangxinggood 的回复:
SqlCommand cmd = new SqlCommand("",conn);

这里要写 "select * from 表" 而且要执行一次Fill才能拿到表的Schema,才能生成其他的Command


这位朋友请仔细看问题

不告诉它db结构,能帮你一次Update了?呵呵。当我啥也没说。 --------------------编程问答-------------------- 用SqlCommandBuilder --------------------编程问答-------------------- 只取结构不要数据:select * from 表 where 1=2 
--------------------编程问答--------------------
引用 10 楼 fangxinggood 的回复:
只取结构不要数据:select * from 表 where 1=2



只要结构的话,系统应该会判断每行都调用insert吧,这样会有重复数据 --------------------编程问答-------------------- 你update里咋么写的,不能直接datatable的,再说你用SqlDataAdapter 那个做查询的,要更新要用ExecNoQuery的吧 --------------------编程问答-------------------- 调用SQLHELPER来UPDATE 这些问题都不存在了。 --------------------编程问答--------------------
引用 4 楼 fangxinggood 的回复:
SqlCommand cmd = new SqlCommand("",conn);

这里要写 "select * from 表" 而且要执行一次Fill才能拿到表的Schema,才能生成其他的Command


SqlCommandBuilder 类(System.Data.SqlClient)

取数据SqlAdapter.Fill(ds, "dtName");
...
更新数据SqlAdapter.Update(dt);它里面还是一行一行根据行状态来提交的 --------------------编程问答--------------------
引用 14 楼 dongxinxi 的回复:
引用 4 楼 fangxinggood 的回复:
SqlCommand cmd = new SqlCommand("",conn);

这里要写 "select * from 表" 而且要执行一次Fill才能拿到表的Schema,才能生成其他的Command


SqlCommandBuilder 类(System.Data.SqlClient)

取数据SqlAdapter.F……



请注意问题,我想要做到的是不取数据。 --------------------编程问答--------------------
引用 13 楼 wxr0323 的回复:
调用SQLHELPER来UPDATE 这些问题都不存在了。


证实:sqlhelper没有update方法
补充:.NET技术 ,  ASP.NET
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,