求助:如何直接构造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 提交到数据库 最终还是要一条条的 更新呀?
你想以 一张表替换 数据库的一张表?你的想法很好 --------------------编程问答--------------------
是避免不了一条一条更新,但是可以避免一次查询。我想要的就是避免这次查询。服务器资源有限,只能这么想办法了。 --------------------编程问答--------------------
那为什么不直接写sql语句进行update呢 --------------------编程问答-------------------- SqlCommand cmd = new SqlCommand("",conn);
这里要写 "select * from 表" 而且要执行一次Fill才能拿到表的Schema,才能生成其他的Command --------------------编程问答-------------------- 那就在存储过程里面做吧 参数用数组传递 --------------------编程问答--------------------
除了update可能还有insert、delete,在不确定行数,不确定操作的情况下,逻辑代码是在太多,所以采用aso.net的自动更新功能 --------------------编程问答--------------------
这位朋友请仔细看问题 --------------------编程问答--------------------
不告诉它db结构,能帮你一次Update了?呵呵。当我啥也没说。 --------------------编程问答-------------------- 用SqlCommandBuilder --------------------编程问答-------------------- 只取结构不要数据:select * from 表 where 1=2
--------------------编程问答--------------------
只要结构的话,系统应该会判断每行都调用insert吧,这样会有重复数据 --------------------编程问答-------------------- 你update里咋么写的,不能直接datatable的,再说你用SqlDataAdapter 那个做查询的,要更新要用ExecNoQuery的吧 --------------------编程问答-------------------- 调用SQLHELPER来UPDATE 这些问题都不存在了。 --------------------编程问答--------------------
SqlCommandBuilder 类(System.Data.SqlClient)
取数据SqlAdapter.Fill(ds, "dtName");
...
更新数据SqlAdapter.Update(dt);它里面还是一行一行根据行状态来提交的 --------------------编程问答--------------------
请注意问题,我想要做到的是不取数据。 --------------------编程问答--------------------
证实:sqlhelper没有update方法
补充:.NET技术 , ASP.NET