创建动态变量

时间:2012-06-12 19:16:03

标签: c# sql-server

我一直致力于一个允许我将数据从我的sql server 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);`

当我遍历我的数据库表时,所有数据都会转到相应的字段或列。同样,问题是我得到相同的行x次。我知道问题是“row1”,因为它会不断更新新值,同时仍保持列表计数。但是,我不能将row1设为列表类型,因为它必须是SDataRow类型,因为这是将我的服务链接到我的数据库列的类。我也尝试使用List.Clear()方法在循环中清除我的列表但是没有用。当我在每次迭代后尝试清除列表时,我会收到错误消息“已添加项目”。所以理论上clear()方法应该工作,它的row1导致问题。有没有人知道工作或制作方法

1 个答案:

答案 0 :(得分:4)

您正在循环外创建SDataRow的实例。在循环内部,您将设置同一实例的属性(每次迭代时覆盖它们),然后将相同的实例添加到列表中。

将该部分代码更改为:

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

因此,您需要在foreach循环中创建新实例