datarow[]怎么一次性的插入到达datatable,不用for循环。或有其他好办法?

wwzwwz4271 2003-12-12 08:22:52
datable_temp=DataSet1.Tables["order"].Clone();
DataRow[] rows=DataSet1.Tables["order"].Select("ordername='nike'","FieldSeries ASC");
for(int i=0;i < rows.Length; i++)
{
dr = datable_temp.NewRow();
for(int j = 0; j<datable_temp.Columns.Count; j++){
dr[j]=rows[i][j];
}
datable_temp.Rows.Add(dr);
}
不用for循环能否一次性的插入到datatable中,因为我的数据两比较大,要循环5000-20000次
将导致系统死!我想一次处理50条记录到datatable中,这样一来,就只循环100-400次,请问怎么实现?
...全文
508 20 打赏 收藏 举报
写回复
20 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
brightheroes 2003-12-14
示例
[Visual Basic, C#] 以下示例创建一个简单的 DataSet,该数据集包含一个表、两个列和十个行。创建了与第一个表几乎相同的第二个 DataTable,二者的区别在于向第二个表中添加了新的 DataColumn。向第二个表中添加两个行,然后将该表合并到 DataSet(preserveChanges 参数设置为 false,missingSchemaAction 参数设置为 MissingSchemaAction.Add)中。
[Visual Basic, C#] 注意 此示例显示如何使用 Merge 的一个重载版本。有关其他可用示例,请参阅单独的重载主题。
[Visual Basic]
Private Sub DemonstrateMergeTableAddSchema()
' Create a DataSet with one table, two columns, and ten rows.
Dim ds As New DataSet("myDataSet")
Dim t As New DataTable("Items")

' Add tables to the DataSet
ds.Tables.Add(t)

' Create and add two columns to the DataTable
Dim c1 As New DataColumn("id", Type.GetType("System.Int32"), "")
c1.AutoIncrement = True
Dim c2 As New DataColumn("Item", Type.GetType("System.Int32"), "")
t.Columns.Add(c1)
t.Columns.Add(c2)

' DataColumn array to set primary key.
Dim keyCol(1) As DataColumn

' Set primary key column.
keyCol(0) = c1
t.PrimaryKey = keyCol

' Add RowChanged event handler for the table.
AddHandler t.RowChanged, AddressOf Row_Changed

' Add ten rows.
Dim i As Integer
Dim r As DataRow

For i = 0 To 9
r = t.NewRow()
r("Item") = i
t.Rows.Add(r)
Next i

' Accept changes.
ds.AcceptChanges()
PrintValues(ds, "Original values")

' Create a second DataTable identical to the first
' with one extra column using the Clone method.
Dim t2 As New DataTable
t2 = t.Clone()

' Add column.
t2.Columns.Add("extra", Type.GetType("System.String"))

' Add two rows. Note that the id column can't be the
' same as existing rows in the DataSet table.
Dim newRow As DataRow
newRow = t2.NewRow()
newRow("id") = 12
newRow("Item") = 555
newRow("extra") = "extra Column 1"
t2.Rows.Add(newRow)

newRow = t2.NewRow()
newRow("id") = 13
newRow("Item") = 665
newRow("extra") = "extra Column 2"
t2.Rows.Add(newRow)

' Merge the table into the DataSet.
Console.WriteLine("Merging")
ds.Merge(t2, False, MissingSchemaAction.Add)
PrintValues(ds, "Merged With Table, Schema Added")
End Sub

Private Sub Row_Changed(sender As Object, e As DataRowChangeEventArgs)
Console.WriteLine("Row Changed " + e.Action.ToString() _
+ ControlChars.Tab + e.Row.ItemArray(0).ToString())
End Sub

Private Sub PrintValues(ds As DataSet, label As String)
Console.WriteLine(ControlChars.Cr + label)
Dim t As DataTable
Dim r As DataRow
Dim c As DataColumn
For Each t In ds.Tables
Console.WriteLine("TableName: " + t.TableName)
For Each r In t.Rows
For Each c In t.Columns
Console.Write(ControlChars.Tab + " " + r(c).ToString())
Next c
Console.WriteLine()
Next r
Next t
End Sub
[C#]
private void DemonstrateMergeTableAddSchema(){
// Create a DataSet with one table, two columns, and ten rows.
DataSet ds = new DataSet("myDataSet");
DataTable t = new DataTable("Items");

// Add table to the DataSet
ds.Tables.Add(t);

// Create and add two columns to the DataTable
DataColumn c1 = new DataColumn("id", Type.GetType("System.Int32"),"");
c1.AutoIncrement=true;
DataColumn c2 = new DataColumn("Item", Type.GetType("System.Int32"),"");
t.Columns.Add(c1);
t.Columns.Add(c2);

// Set the primary key to the first column.
t.PrimaryKey = new DataColumn[1]{ c1 };

// Add RowChanged event handler for the table.
t.RowChanged+= new DataRowChangeEventHandler(Row_Changed);

// Add ten rows.
for(int i = 0; i <10;i++){
DataRow r=t.NewRow();
r["Item"]= i;
t.Rows.Add(r);
}

// Accept changes.
ds.AcceptChanges();
PrintValues(ds, "Original values");

// Create a second DataTable identical to the first, with
// one extra column using the Clone method.
DataTable t2 = t.Clone();
t2.Columns.Add("extra", typeof(string));

// Add two rows. Note that the id column can't be the
// same as existing rows in the DataSet table.
DataRow newRow;
newRow=t2.NewRow();
newRow["id"]= 12;
newRow["Item"]=555;
newRow["extra"]= "extra Column 1";
t2.Rows.Add(newRow);

newRow=t2.NewRow();
newRow["id"]= 13;
newRow["Item"]=665;
newRow["extra"]= "extra Column 2";
t2.Rows.Add(newRow);

// Merge the table into the DataSet.
Console.WriteLine("Merging");
ds.Merge(t2,false,MissingSchemaAction.Add);
PrintValues(ds, "Merged With Table, Schema Added");
}

private void Row_Changed(object sender, DataRowChangeEventArgs e){
Console.WriteLine("Row Changed " + e.Action.ToString() + "\t" + e.Row.ItemArray[0]);
}

private void PrintValues(DataSet ds, string label){
Console.WriteLine("\n" + label);
foreach(DataTable t in ds.Tables){
Console.WriteLine("TableName: " + t.TableName);
foreach(DataRow r in t.Rows){
foreach(DataColumn c in t.Columns){
Console.Write("\t " + r[c] );
}
Console.WriteLine();
}
}
}
  • 打赏
  • 举报
回复
brightheroes 2003-12-14




重载列表
将 DataRow 对象数组合并到当前的 DataSet 中。

[Visual Basic] Overloads Public Sub Merge(DataRow())
[C#] public void Merge(DataRow[]);
[C++] public: void Merge(DataRow*[]);
[JScript] public function Merge(DataRow[]);
将指定的 DataSet 及其架构合并到当前 DataSet 中。

[Visual Basic] Overloads Public Sub Merge(DataSet)
[C#] public void Merge(DataSet);
[C++] public: void Merge(DataSet*);
[JScript] public function Merge(DataSet);
将指定的 DataTable 及其架构合并到当前 DataSet 中。

[Visual Basic] Overloads Public Sub Merge(DataTable)
[C#] public void Merge(DataTable);
[C++] public: void Merge(DataTable*);
[JScript] public function Merge(DataTable);
将指定的 DataSet 及其架构合并到当前 DataSet 中,在此过程中,将根据给定的参数保留或放弃在此 DataSet 中进行的任何更改。

[Visual Basic] Overloads Public Sub Merge(DataSet, Boolean)
[C#] public void Merge(DataSet, bool);
[C++] public: void Merge(DataSet*, bool);
[JScript] public function Merge(DataSet, Boolean);
将 DataRow 对象数组合并到当前的 DataSet 中,在此过程中,将根据给定的参数保留或放弃在 DataSet 中进行的更改并处理不兼容的架构。

[Visual Basic] Overloads Public Sub Merge(DataRow(), Boolean, MissingSchemaAction)
[C#] public void Merge(DataRow[], bool, MissingSchemaAction);
[C++] public: void Merge(DataRow*[], bool, MissingSchemaAction);
[JScript] public function Merge(DataRow[], Boolean, MissingSchemaAction);
将指定的 DataSet 及其架构与当前的 DataSet 合并,在此过程中,将根据给定的参数保留或放弃在当前 DataSet 中的更改并处理不兼容的架构。

[Visual Basic] Overloads Public Sub Merge(DataSet, Boolean, MissingSchemaAction)
[C#] public void Merge(DataSet, bool, MissingSchemaAction);
[C++] public: void Merge(DataSet*, bool, MissingSchemaAction);
[JScript] public function Merge(DataSet, Boolean, MissingSchemaAction);
将指定的 DataTable 及其架构合并到当前的 DataSet 中,在此过程中,将根据给定的参数保留或放弃在 DataSet 中进行的更改并处理不兼容的架构。

[Visual Basic] Overloads Public Sub Merge(DataTable, Boolean, MissingSchemaAction)
[C#] public void Merge(DataTable, bool, MissingSchemaAction);
[C++] public: void Merge(DataTable*, bool, MissingSchemaAction);
[JScript] public function Merge(DataTable, Boolean, MissingSchemaAction);
示例
[Visual Basic, C#] 以下示例创建一个简单的 DataSet,该数据集包含一个表、两个列和十个行。创建了与第一个表几乎相同的第二个 DataTable,二者的区别在于向第二个表中添加了新的 DataColumn。向第二个表中添加两个行,然后将该表合并到 DataSet(preserveChanges 参数设置为 false,missingSchemaAction 参数设置为 MissingSchemaAction.Add)中。




  • 打赏
  • 举报
回复
wwzwwz427 2003-12-14
ms-help://MS.VSCC.2003/MS.MSDNQTR.2003FEB.2052/cpref/html/frlrfSystemDataDataSetClassMergeTopic.htm
我怎么进不去?
怎么进?在IE上,还是在开始-->运行
  • 打赏
  • 举报
回复
wwzwwz427 2003-12-14
DataRow[] myrow=st_page_ds1.Tables["wage_dat"].Select("emp_order<6");
DataSet ds1=new DataSet();
DataTable myTable=new DataTable("wage_dat");
myTable=st_page_ds1.Tables["wage_dat"].Clone();
myTable.TableName="wage_dat1";
ds1.Tables.Add(myTable);
ds1.AcceptChanges();
ds1.Merge(myrow);//合

ds1.AcceptChanges();
DataGrid2.DataSource=ds1.Tables["wage_dat1"];
DataGrid2.DataBind();
好想不对??myTable无任何值
  • 打赏
  • 举报
回复
速马 2003-12-14
private static void SetDataSet(ref DataSet inputDs,ref DataSet outputDs,string tableName)
{
inputDs.Tables[0].TableName = tableName;
outputDs.Merge(inputDs);
inputDs.Dispose();
}
以前写到
这里用的DataSet,其实一样,楼主看看吧
一个Merge搞定
  • 打赏
  • 举报
回复
wwzwwz427 2003-12-14
不能用循环
  • 打赏
  • 举报
回复
brightheroes 2003-12-14
merge主要是为了将不同的结构的两张表来合并的
你应该用
foreach(DataRow dr in rows)
{

datable_temp.Rows.Add(dr);
}

  • 打赏
  • 举报
回复
brightheroes 2003-12-14
see
ms-help://MS.VSCC.2003/MS.MSDNQTR.2003FEB.2052/cpref/html/frlrfSystemDataDataSetClassMergeTopic.htm

or

foreach(DataRow dr in rows)
{

datable_temp.Rows.Add(dr);
}
  • 打赏
  • 举报
回复
wwzwwz427 2003-12-14
我还有其他处理!比如统计过滤出来的每列的总和!做为本页统计!请问能否合?
  • 打赏
  • 举报
回复
brightheroes 2003-12-14
楼主
我觉得你既然得到了这样的一个DataRow[],直接用不就可以了
为什么还要合到一个DataTable中呢?
  • 打赏
  • 举报
回复
wwzwwz427 2003-12-14
shangwg(shangwg) 怎么用合并1!
DataRow[] myrow=st_page_ds1.Tables["wage_dat"].Select("emp_order<6");
怎么合并到一个和它结构一样的新的datatable中!???
  • 打赏
  • 举报
回复
wwzwwz4271 2003-12-13
foreach(DataRow myRow1 in dt.Rows)//2000条
{

total_i++;

j=0;
myRow = myTable.NewRow();
if(temp_is_order.ToLower()=="true")
myRow["序号"] = total_i;//给值
foreach(DataColumn myCol in dt.Columns)
{
// Then add the new row to the collection.

if(totalstr!=""||pagestr!="")//不统计本页小计或汇总
{
foreach(Point_wwz2 Point1 in ArrayList_page)
{
if(Point1.col_field.ToLower().Trim()==myCol.ColumnName.ToLower().Trim())
{
if(Point1.item_type=="decimal"||Point1.item_type=="integer")
{
if(myRow1[myCol]!=null&&myRow1[myCol].ToString()!="")
{
if(pagestr!="")
temp_float[j]=temp_float[j]+float.Parse(myRow1[myCol].ToString());
if(totalstr!="")
total_float[j]=total_float[j]+float.Parse(myRow1[myCol].ToString());
}
}
}
}
}
j++;
myRow[myCol.ColumnName.Trim()] = myRow1[myCol];//给值
}
我想用过滤,一次处理20条用列.compute(sum(列))!这样循环减少到2000/20
您有更好的办法吗?
  • 打赏
  • 举报
回复
wwzwwz4271 2003-12-13
并每列求总和!将导致死机,循环太多!
  • 打赏
  • 举报
回复
wwzwwz4271 2003-12-13
我现在有2000条记录!每20条作为一页,并进行计算本页小计(计算本页各列总和)我是循环2000条记录,并每列相加将导致死机,循环太多!
  • 打赏
  • 举报
回复
ZXYSOSO 2003-12-13
用SQL语法:
insert into table1(a,b,c) select a1,a2,a3 from table2 where a1 not in (select a from table1)
可写成储存过程,在ASP.NET调用

table1 key=a
table2 key=a1

table1和table2的字段类型要相同
  • 打赏
  • 举报
回复
brightheroes 2003-12-13
其实不太明白楼主要干什么
  • 打赏
  • 举报
回复
wwzwwz4271 2003-12-13
shangwg(shangwg)能否举例!
  • 打赏
  • 举报
回复
shangwg 2003-12-13
用merge方法,一次高定(数据结构要相同)
  • 打赏
  • 举报
回复
brightheroes 2003-12-12


foreach(DataRow dr in rows)
{

datable_temp.Rows.Add(dr);
}
不就ok了?
  • 打赏
  • 举报
回复
不如直接用SQL语句实现吧,没有好的办法了
  • 打赏
  • 举报
回复
相关推荐
发帖
.NET社区
加入

6.0w+

社区成员

.NET技术交流专区
帖子事件
创建了帖子
2003-12-12 08:22
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。