2

编码

foreach (TreeNode item in this.TreeView1.CheckedNodes)
{
   if (item.Checked == true)
   {
      int strTreeValue = Convert.ToInt32(item.Value);
      SqlCommand com = new SqlCommand("Update Role_Menu Set Role_id=('" + roleid + "')
                             Where Menu_id=('" + strTreeValue + "')", con);
      com.ExecuteNonQuery();
      da = new SqlDataAdapter(com);
      ds = new DataSet();
      da.Fill(ds);
      if (ds.Tables.Count == 0)
      {
          com = new SqlCommand("insert into Role_Menu(Role_id,Menu_id) 
                          values('" + roleid + "','" + strTreeValue + "')", con);
          com.ExecuteNonQuery();
      }
 }

在上面if(ds.tables.count == 0)我试图找出行是否已更新,但它是错误的并且不起作用。如果更新了一行,那么我们如何知道它已更新以及更新了哪一行。

4

1 回答 1

0

您可以使用以下代码

foreach (TreeNode item in this.TreeView1.CheckedNodes)
{
   if (item.Checked == true)
   {
      int strTreeValue = Convert.ToInt32(item.Value);
      SqlCommand com = new SqlCommand("Update Role_Menu Set Role_id=('" + roleid + "')
                             Where Menu_id=('" + strTreeValue + "')", con);
      int i=com.ExecuteNonQuery();

      if (i<= 0)
      {
          com = new SqlCommand("insert into Role_Menu(Role_id,Menu_id) 
                          values('" + roleid + "','" + strTreeValue + "')", con);
          com.ExecuteNonQuery();
      }
 }

编辑 1

你不需要使用SqlDataAdapterandDataSet

如果你从你的问题中运行 SQLSqlCommand并检查它的返回值ExecuteNonQuery应该告诉你有多少记录受到影响。

文档中:

返回值
类型:System.Int32
受影响的行数。

于 2013-03-14T07:15:19.703 回答