循环把数组的元素放入表里的问题
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 新行 放到循环里面去