如何更新DataTable的数据到数据库?

davidtsui 2009-04-04 02:48:15
先看个范例,麻烦大家。目的是添加/删除部门用户。

首先,将所有部门名称和ID绑定到dropdownlist内(数据表Departments):

//获取所有部门
string strSql = "SELECT depID, depName FROM Departments";
SqlDataAdapter da = new SqlDataAdapter(strSql, objConnection);
DataTable dtDepartments = new DataTable();
da.Fill(dtDepartments);
DropDownList1.DataSource = dtDepartments.DefaultView;
DropDownList1.DataTextField = "depName";
DropDownList1.DataValueField = "depID";
DropDownList.DataBind();

然后,选择所有用户,绑定到CheckBoxList里面(数据表 Users):

//选择所有用户:
string strSql = "SELECT * FROM Users";
SqlDataAdapter da = new SqlDataAdapter(strSql, objConnection);
DataTable dtUsers = new DataTAble();
da.fill(dtUsers);
CheckBoxList1.DataSource = dtUsers.DefaultView;
CheckBoxList1.DataTextField = "UserName";
CheckBoxList1.DataValueField = "UserID";
CheckBoxList1.DataBind();

接着,当通过dropdownlist选择不同的部门时,根据部门编号,查询UsersInDepartment表内都有什么用户,就可以列出部门里有哪些用户了(数据表UsersInDeparmtnet):

string strSql = "SELECT userID FROM UsersInDepartment WHERE depID="+dropdownlist选中的depID;
SqlDataAdapter da = new SqlDataAdapter(strSql, objConnection);
DataTable dtUsersInDepartment = new DataTAble();
da.fill(dtUsersInDepartment);
//遍历dtUsersInDepartment,选中和CheckBoxList1项相同ID的CheckBox:
foreach(DataRow r in dtUsersInDepartment.Rows)
{
// 这里就不写了,总之就是,处于当前选中组内的用户,就打个勾。
}

好啦,然后呢,我就可以通过选中和反选中来设定部门里都有哪些用户了。
问题是,我怎么将最后的数据更新呢?我现在的办法是:
先删除UsersInDepartments 内所有 depID = dropdownlist选中的depID 项,然后根据CheckBoxList1内的选中项循环执行sp_AddUserToDepartment存储过程,遇到选中的用户,就将它插入数据库一次。也就是说,即便你将一个用户删除出部门,也要先删除所有该部门的项,然后添加进去。


最后,在下的问题是,是不是能有个更好的方法作这个操作呢?比如操作DataTable,然后更新到数据库,这个方法是否对我当前的设计适用呢?
又或者,针对目前的设计,有没有其他办法(因为系统已经用了很久了,大改动不方便)?

谢谢大家了,100分~
...全文
1374 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
teerhu 2009-04-05
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 jijunwu 的回复:]
C# code

DataTable dt=new DataTable();
SqlDataAdapter sda=new SqlDataAdapter ();
DataSet ds=new DataSet();
ds.Tabla.Add(dt);
sda.Fill(ds);
sda.Update(ds);
[/Quote]
marist 2009-04-05
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 namhyuk 的回复:]
唉,其实微软对于这类东西已经在winform/asp.net上都为你想好了。

asp.net是在TemplateField里放DropDownList,绑定到Data Sorce控件后,关键是指定SelectedValue.

winform也一样。有个类似的作法。具体好像MSDN上也应该能找到。我因为好久没碰winform,所以暂时找不到链接。

我只是说这类问题其实很容易解决。
[/Quote]

我也在头疼这个问题。

能不能来一个简单的范例
wuyq11 2009-04-04
  • 打赏
  • 举报
回复
传递选择值到存储过程,通过charindex循环,判断是否存在,如在就不添加。否则添加数据。
sayluyun 2009-04-04
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 jijunwu 的回复:]
C# code

DataTable dt=new DataTable();
SqlDataAdapter sda=new SqlDataAdapter ();
DataSet ds=new DataSet();
ds.Tabla.Add(dt);
sda.Fill(ds);
sda.Update(ds);
[/Quote]

UP··
namhyuk 2009-04-04
  • 打赏
  • 举报
回复
唉,其实微软对于这类东西已经在winform/asp.net上都为你想好了。

asp.net是在TemplateField里放DropDownList,绑定到Data Sorce控件后,关键是指定SelectedValue.

winform也一样。有个类似的作法。具体好像MSDN上也应该能找到。我因为好久没碰winform,所以暂时找不到链接。

我只是说这类问题其实很容易解决。
  • 打赏
  • 举报
回复


DataTable dt=new DataTable();
SqlDataAdapter sda=new SqlDataAdapter ();
DataSet ds=new DataSet();
ds.Tabla.Add(dt);
sda.Fill(ds);
sda.Update(ds);

62,268

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧