2009-05-13 9 views
3

私はsthがないと思います。些細なはここに:私は、データセットを更新し、戻ってから来たデータベースにそれをプッシュしたいが、私は入れません午前:データセットの更新と永続化の問題

同時実行違反を: にUpdateCommandが 予想1つのレコードの0に影響を与えました。

は、ここでは、このエラーを生成するいくつかのコードです:

public static void UpdateNorthWindWithDataset() 
    { 
     string connString = 
      @"Data Source=localhost;Initial Catalog=NorthWind;Integrated Security=SSPI;"; 


     using (SqlConnection conn = new SqlConnection(connString)) 
     { 
      conn.Open(); 


      // Declaring a DataAdapter and initiating it with a Select and updateCommand     
      SqlDataAdapter da = new SqlDataAdapter(); 

      SqlCommand selectCmd = new SqlCommand("SELECT CustomerId, City, Region " + 
                "FROM Customers" 
                , conn 
       ); 

      da.SelectCommand = selectCmd; 

      SqlCommand updateCmd = new SqlCommand(
       @"UPDATE Customers SET City='@City', Region='@Region'" + 
       @"WHERE CustomerID = '@CustomerID'", 
       conn 
       ); 

      updateCmd.Parameters.AddRange(
       new SqlParameter[] 
        { 
         new SqlParameter() 
          { 
           ParameterName = "@CustomerID", 
           SourceColumn = "customerid" 
          }, 
         new SqlParameter() 
          { 
           ParameterName = "@City", 
           SourceColumn = "city", 
           SqlDbType = SqlDbType.VarChar 
          }, 
         new SqlParameter() 
          { 
           ParameterName = "@Region", 
           SourceColumn = "region", 
           SqlDbType = SqlDbType.VarChar 
          } 
        } 
       ); 


      da.UpdateCommand = updateCmd; 

      // filling dataset 
      DataSet ds = new DataSet(); 
      da.Fill(ds, "srcCustomers"); 

      // declaring and editing datatable 
      DataTable tblCustomers = ds.Tables["srcCustomers"]; 

      foreach (DataRow row in tblCustomers.Rows) 
      { 
       row["City"] = "justUpdated"; 
       row["Region"] = "justUpdated too"; 
      } 

      da.Update(ds, "srcCustomers"); 
     } 
    } 

さて、私のendgoalはOLEDB throug MSACCESSで、この種のコードを使用しているが、私はそれをできるだけ明確たかったので、私はまだ(MSSQLを試してみました2kここで)ネイティブの.netサポートでは、まだエラーが発生しました...

答えて

2

提供された顧客IDと一致するレコードを見つけることができないため、更新が失敗しています。デフォルトに設定されています - SQLパラメータのための追加の値があります。です。

OLEDBを見ている場合は、パラメータに名前が付けられていないことを認識する必要があります(名前を付ける必要がありますが、名前を付ける必要がありますが、入力された順序で使用されます)同じパラメータを2回使用することはできません。これはちょっと面倒です)。

+0

+1、参考にしてください。 furter私はsqlパラメータのデフォルトのようなフィールドを参照してください – Peter