![](https://i-blog.csdnimg.cn/blog_migrate/40ce85ffa95959bcc0093eaffd442444.jpeg)
一、设置更新参数
con.Open();
SqlDataAdapter uda=new SqlDataAdapter();
//当DataAdapter对象执行fill()或update()方法时,会分别调用以下四个命令对数据库进行访问和回添解析
uda.SelectCommand=new SqlCommand("select mkmc,enabled,id from userqxb,con);
uda.UpdateCommand=new SqlCommand("update userqxb set enabled=@enabled
where userid=@userid and function_name=@function_name",con);
}
//为UpdateCommand命令填加参数,并设置参数值。参数值为内存表被改动的行值.
uda.UpdateCommand.Parameters.Add("@function",SqlDbType.VarChar ,20,"mkmc");
//参数的value应该等于内存表中被修改行的stuid值
uda.UpdateCommand.Parameters.Add("@enabled",SqlDbType.Bit,10,"enabled");
//参数的value应该等于内存表中被修改行的stuname值
uda.UpdateCommand.Parameters.Add("@userid",SqlDbType.VarChar,10,"id");
//参数的value应该等于内存表中被修改行的stuname值
DataSet uds=new DataSet();
uda.Fill(uds," userqxb ");
二、对内存中的DataSet数据集进行更新
for(int i=0;i<Treeqxlb.Nodes.Count;i++)
{
//取出主结点的复选框的状态,并转换为数值型
int q=Convert.ToInt32(Treeqxlb.Nodes[i].Checked);
//在内存表中找出想修改的行
DataRow[] d=uds.Tables["userqxb"].Select("mkmc='"+Treeqxlb.Nodes[i].Text+"'");
for(int k=0;k<d.Length;k++)
{
//在内存表中把予修改的行中的列值进行赋值
d[k]["enabled"]=q;
}
//将被修改的行值做为参数传给UpdateCommand命令,并调用UpdateCommand命令,去修改数据库中相应值,将内存表中的变动解析回数据库
uda.Update(uds,“userqxb”);
for(int j=0;j<Treeqxlb.Nodes[i].Nodes.Count;j++)
{
//取出子结点的复选框的状态,并转换为数值型
int s=Convert.ToInt32(Treeqxlb.Nodes[i].Nodes[j].Checked);
//在内存表中找出想修改的行
DataRow[] c=uds.Tables["xtgnb"].Select("mkmc='"+Treeqxlb.Nodes[i].Nodes[j].Text+"'");
for(int l=0;l<c.Length;l++)
{
//在内存表中把予修改的行中的列值进行赋值
c[l]["enabled"]=s;
}
//将被修改的行值做为参数传给UpdateCommand命令,并调用UpdateCommand命令,去修改数据库中相应值,将内存表中的变动解析回数据库
uda.Update(uds,“userqxb”);
}
}
三、将修改后的数据集进行物理更新
con.Open();
SqlDataAdapter uda=new SqlDataAdapter();
//当DataAdapter对象执行fill()或update()方法时,会分别调用以下四个命令对数据库进行访问和回添解析
uda.SelectCommand=new SqlCommand("select mkmc,enabled,id from userqxb,con);
uda.UpdateCommand=new SqlCommand("update userqxb set enabled=@enabled
where userid=@userid and function_name=@function_name",con);
}
//为UpdateCommand命令填加参数,并设置参数值。参数值为内存表被改动的行值.
uda.UpdateCommand.Parameters.Add("@function",SqlDbType.VarChar ,20,"mkmc");
//参数的value应该等于内存表中被修改行的stuid值
uda.UpdateCommand.Parameters.Add("@enabled",SqlDbType.Bit,10,"enabled");
//参数的value应该等于内存表中被修改行的stuname值
uda.UpdateCommand.Parameters.Add("@userid",SqlDbType.VarChar,10,"id");
//参数的value应该等于内存表中被修改行的stuname值
DataSet uds=new DataSet();
uda.Fill(uds," userqxb ");
二、对内存中的DataSet数据集进行更新
for(int i=0;i<Treeqxlb.Nodes.Count;i++)
{
//取出主结点的复选框的状态,并转换为数值型
int q=Convert.ToInt32(Treeqxlb.Nodes[i].Checked);
//在内存表中找出想修改的行
DataRow[] d=uds.Tables["userqxb"].Select("mkmc='"+Treeqxlb.Nodes[i].Text+"'");
for(int k=0;k<d.Length;k++)
{
//在内存表中把予修改的行中的列值进行赋值
d[k]["enabled"]=q;
}
//将被修改的行值做为参数传给UpdateCommand命令,并调用UpdateCommand命令,去修改数据库中相应值,将内存表中的变动解析回数据库
uda.Update(uds,“userqxb”);
for(int j=0;j<Treeqxlb.Nodes[i].Nodes.Count;j++)
{
//取出子结点的复选框的状态,并转换为数值型
int s=Convert.ToInt32(Treeqxlb.Nodes[i].Nodes[j].Checked);
//在内存表中找出想修改的行
DataRow[] c=uds.Tables["xtgnb"].Select("mkmc='"+Treeqxlb.Nodes[i].Nodes[j].Text+"'");
for(int l=0;l<c.Length;l++)
{
//在内存表中把予修改的行中的列值进行赋值
c[l]["enabled"]=s;
}
//将被修改的行值做为参数传给UpdateCommand命令,并调用UpdateCommand命令,去修改数据库中相应值,将内存表中的变动解析回数据库
uda.Update(uds,“userqxb”);
}
}
三、将修改后的数据集进行物理更新
try
{
uds.AcceptChanges();//将内存表进行物理变更
Response.Write(“权限更新完毕!”);
}
catch
{ Response.Write(“权限更新失败!”);
}
con.Close();
{
uds.AcceptChanges();//将内存表进行物理变更
Response.Write(“权限更新完毕!”);
}
catch
{ Response.Write(“权限更新失败!”);
}
con.Close();
说明:
由于每点击一次树控件的结点,都要向服务器提交一次并刷新一次页面,所以最好在新增用户时就将通用模块的使用权限与用户进行绑定,以减少提交次数和页面刷新的时间。
![](https://i-blog.csdnimg.cn/blog_migrate/5f799ece54760c4df65b72c1a5407784.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/40ce85ffa95959bcc0093eaffd442444.jpeg)
转载于:https://blog.51cto.com/chenxing/58175