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

SqlDataAdapterandを使用する必要はありませんDataSet

。質問から SQL を実行し、SqlCommandその戻り値を確認すると、ExecuteNonQuery影響を受けたレコードの数がわかります。

ドキュメントから:

戻り値
の型: System.Int32
影響を受けた行の数。

于 2013-03-14T07:15:19.703 に答える