日期:2014-05-18  浏览次数:20938 次

循环把数组的元素放入表里的问题
public void RptReceive()
  {
  DataAccess.Class1 dac = new DataAccess.Class1();
  DataSet ds = dac.getRecRpt();
  DataRow dr = ds.Tables[0].NewRow();
  RPTItem[] RptReceive = apiclient.receiveRPT();
  if (RptReceive == null || RptReceive.Length == 0)
  {

  }
  else
  {
  for (int i = 0; i < RptReceive.Length; i++)
  {
  dr["SmID"] = Convert.ToInt64(RptReceive[i].getSmID().ToString());
  dr["RecRptNumber"] = RptReceive[i].getMobile().ToString();
  dr["RecRptContent"] = RptReceive[i].getDesc().ToString();
  dr["RecRptTime"] = Convert.ToDateTime(RptReceive[i].getRptTime().ToString());
  ds.Tables[0].Rows.Add(dr);
   
  }
  }
   

  }
定义了RptReceive数组。当数组里只有一个元素的时候运行正常,超过一个就会在ds.Tables[0].Rows.Add(dr);处报错“该行已经属于此表”。
应该是循环有问题,以dr["SmID"] = Convert.ToInt64(RptReceive[i].getSmID().ToString()这行为例,当RptReceive[i].getSmID()获取
2个数组就无法把他们放入字段"SmID"中。请大虾们写个方法,能让我无论取出多少个元素都能先取一个放一个到表(行)里,然后换一行再取一个放到新行里
小弟初学.NET,望不吝赐教,谢谢。
PS:用的是VS2005,C# , MSSQL2005

------解决方案--------------------
DataRow dr = ds.Tables[0].NewRow(); 
这里你只New了一行。在下面却在循环添加N行。。
------解决方案--------------------
DataRow dr = New DataRow ();

这句话加到下面去

for (int i = 0; i < RptReceive.Length; i++) 

DataRow dr = New DataRow ();
dr["SmID"] = Convert.ToInt64(RptReceive[i].getSmID().ToString()); 
dr["RecRptNumber"] = RptReceive[i].getMobile().ToString(); 
dr["RecRptContent"] = RptReceive[i].getDesc().ToString(); 
dr["RecRptTime"] = Convert.ToDateTime(RptReceive[i].getRptTime().ToString()); 
ds.Tables[0].Rows.Add(dr); 



应该可以的吧

------解决方案--------------------
把new 新行 放到循环里面去