0

私は自分のSQLサーバーDBからSOAPサービスにデータをアップロードできるようにするプログラムに取り組んできました。データをサービスに正常にアップロードできます。問題は、同じ行が挿入されていることです。以下は私のコードの一部です:`

            List<service1.SDataRow> ArrayOfSData = new List<ne_service_demo2.service1.SDataRow>();
               //data to be uploaded. 
                    service1.SDataRow row1 = new service1.SDataRow();
                    foreach (DataRow dRow in dTable.Rows)
                    {

                         row1.SensorTimeStamp = dRow["SensorTimeStamp"].ToString();
                         row1.SensorID = dRow["SensorID"].ToString();
                         row1.PercentFull = dRow["PercentFull"].ToString();
                         row1.Temp = dRow["Temp"].ToString();
                         row1.TempReading = dRow["TempReading"].ToString();
                         row1.Sig = dRow["Sig"].ToString();
                         row1.SignalReading = dRow["SignalReading"].ToString();
                         row1.Noi = dRow["Noi"].ToString();
                         row1.NoiseReading = dRow["NoiseReading"].ToString();
                         row1.Cou = dRow["Cou"].ToString();
                         row1.CountReading = dRow["CountReading"].ToString();
                         row1.NewPercentFull = dRow["NewPercentFull"].ToString();
                         row1.Current_Gallons_In_Tank = dRow["Current_Gallons_In_Tank"].ToString();
                         ArrayOfSData.Add(row1);                                                       
                    }

                    service1.SensorData sd = new service1.SensorData();
                    sd.API_ACCESS_KEY = "7e070c1981ccc368483a207801be17aa17b2334c";
                    sd.AccountCode = "0000000";
                    sd.SData = ArrayOfSData.ToArray();

                    // Asynchronous call
                    ws.PostSensorDataCompleted += WebSeviceResult;
                    ws.PostSensorDataAsync(sd);`

DBテーブルをループすると、すべてのデータが適切なフィールドまたは列に移動します。繰り返しますが、問題は、同じ行をx回取得することです。リスト数を維持しながら常に新しい値で更新されているため、問題は「row1」であることがわかります。ただし、row1はSDataRow型である必要があるため、リスト型にすることはできません。これは、サービスをDBの列にリンクするクラスであるためです。また、List.Clear()メソッドを使用してループ内のリストをクリアしようとしましたが、機能しませんでした。反復するたびにリストをクリアしようとすると、「アイテムはすでに追加されています」というエラーが表示されます。したがって、理論的には、clear()メソッドが機能するはずであり、問​​題を引き起こしているのはそのrow1です。誰かが回避策や作る方法を知っていますか

4

1 に答える 1

4

ループの外側にSDataRowのインスタンスを作成しています。ループ内では、同じインスタンスのプロパティを設定し(反復ごとに上書きします)、同じインスタンスをリストに追加します。

コードのその部分を次のように変更します。

  foreach (DataRow dRow in dTable.Rows)
  {
      service1.SDataRow row1 = new service1.SDataRow();

したがって、foreachループ内に新しいインスタンスを作成する必要があります

于 2012-06-12T19:22:08.970 に答える