DataSet,DataTable.DataRow复制(解决此行已属于另一个表)以及DataTable 实现表结构转换
来源:互联网 发布:morphologyex python 编辑:程序博客网 时间:2024/06/05 17:21
转自:http://blog.csdn.net/z775480954/article/details/6724992
表A:
------------------
InfoID FName FContext
1 name1 c1
1 name2 c2
1 name3 c3
2 name1 c4
3 name4 c5
------------------
转换成
表B:
---------------------
InfoID name1 name2 name3 name4
1 c1 c2 c3 null
2 c4 null null null
3 null null null c5
---------------------
先在数据库中创建表A
通过asp.net来访问数据库
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Web;
- using System.Web.UI;
- using System.Web.UI.WebControls;
- using System.Data.SqlClient;
- using System.Data;
- using System.Configuration;
- namespace JavaScript
- {
- public partial class DD : System.Web.UI.Page
- {
- protected void Page_Load(object sender, EventArgs e)
- {
- //获取FName集合,去掉重复
- DataTable dtFName = GetData("select DISTINCT FName from A", "FName");
- DataTable dtTable = new DataTable();
- //dtTable 添加列名
- dtTable.Columns.Add("InfoID ",typeof(int));
- for (int i = 0; i < dtFName.Rows.Count; i++)
- {
- dtTable.Columns.Add(dtFName.Rows[i][0].ToString(), typeof(string));
- }
- //获取表A的数据
- DataTable dtA=GetData("select * from A","A");
- //获取InfoID集合
- DataTable dtInfoID = GetData("select DISTINCT InfoID from A", "InfoID");
- int count=dtInfoID.Rows.Count;
- //创建表结构
- for (int i = 0; i < count; i++)
- {
- DataRow row = dtTable.NewRow();
- object[] obj = new object[dtInfoID.Rows.Count];
- obj[0] = dtInfoID.Rows[i][0];
- row.ItemArray = obj;
- dtTable.Rows.Add(row);
- }
- //循环给表填充值
- for (int i = 0; i < dtA.Rows.Count; i++)
- {
- DataRow drA = dtA.Rows[i];
- for (int j = 0; j < dtTable.Rows.Count; j++)
- {
- DataRow row=dtTable.Rows[j];
- //对应列名填充
- if (Convert.ToInt32(row[0]) == Convert.ToInt32(drA[1]))
- {
- row[drA[2].ToString()] = drA[3];
- }
- else
- {
- row[drA[2].ToString()] = "null";
- }
- }
- }
- GridView1.DataSource = dtTable;
- GridView1.DataBind();
- }
- //数据库访问,获取数据
- protected DataTable GetData(string sql,string tbName)
- {
- string connStr = ConfigurationManager.ConnectionStrings["FileManageConnectionString"].ConnectionString;
- SqlConnection conn = new SqlConnection(connStr);
- SqlDataAdapter sda = new SqlDataAdapter(sql, conn);
- DataSet ds = new DataSet();
- sda.Fill(ds, tbName);
- DataTable dt = ds.Tables[tbName];
- return dt;
- }
- }
- }
转自:http://www.cnblogs.com/chiname/articles/143167.html
DataSet,DataTable.DataRow复制方法——解决:此行已属于另一个表
经常遇到这种错误,“此行已属于另一个表”的错误。
导致这个错误的语句如下:
dtPriceTable.Rows.InsertAt(aDataRow,i);
或者
dtPriceTable.Rows.Add(aDataRow);
我分析了一下原因,因为DataRow DataTable 都是传引用调用的。所以一个行在一个表中了,就不能再增加到另外一个表。
具体的改善策略有两种:
1、 把原始DataRow的每列依次赋值。如下:
DataRow tempRow = dtItemPrice.NewRow();
tempRow ["First"] = aDataRow ["First "]
tempRow ["second"] = aDataRow ["second "]
tempRow ["third"] = aDataRow ["third "]
tempRow ["forth"] = aDataRow ["forth "]
tempRow ["Fifth"] = aDataRow ["Fifth "]
……
dtPriceTable.Rows.Add(tempRow)
2、 有个同事提醒我为什么不循环DataTable的每个列呢?我想是哦,为什么不呢!
呵呵,这样子,不管Table有多少列,只需要3句话就搞定了
DataRow aDataRow = dtItemPrice.NewRow();
foreach(DataColumn aDataColumn in dtItemPrice.Columns)
{
aDataRow[aDataColumn.ColumnName] = drItemPrices[i][aDataColumn.ColumnName];
}
InsertConditionType(aDataRow,dtItemPrice);
测试就可以了。
后来看了看DataSet 和 DataTable 都有一个方法:Copy(),复制该 System.Data.DataTable 的结构和数据。
那么结合这个函数,无论是DataSet 和 DataTable还是DataRow都有复制的方法了。
Feedback
# re: DataSet,DataTable.DataRow复制方法——解决:此行已属于另一个表
2004-07-08 12:31 by zhaixd如下面所示:
DataRow aDataRow = dtItemPrice.NewRow();
aDataRow.ItemArray = drItemPrices[i].ItemArray;
dtItemPrice.Rows.Add(aDataRow);
# re: DataSet,DataTable.DataRow复制方法——解决:此行已属于另一个表
2004-07-08 13:20 by 柚子nan你的方法更强!
# re: DataSet,DataTable.DataRow复制方法——解决:此行已属于另一个表
2004-07-08 13:47 by Knight
- DataSet,DataTable.DataRow复制(解决此行已属于另一个表)以及DataTable 实现表结构转换
- DataTable.DataRow的复制(解决:此行已属于另一个表)
- DataTable.DataRow的复制(解决:此行已属于另一个表)
- DataTable.DataRow的复制(解决:此行已属于另一个表)
- DataRow复制一行到另一个DataTable 此行已属于另一个表
- 如何解决"DataTable已属于另一个DataSet问题"
- DataTable已属于另一个DataSet问题的解办法
- DataTable已属于另一个DataSet问题的解办法
- ”错误:DataTable已属于另一个DataSet “的解决方法
- DataTable 已属于另一个 DataSet。 dataTable.copy()方法进另外一个DataSet
- 在想DataSet中添加DataTable时,报错DataTable 已属于另一个 DataSet的解决办法
- C# 向一个DataTable内插入另一个DataTable的行,error“该行已属于另一个表”
- 复制DataTable数据,c#出错:该行已经属于另一个表
- 怎样向DataTable中添加属于另一个DataTable的DataRow
- DataSet、DataTable、DataRow的数据复制方法
- DataSet,DataTable与DataRow的复制方法
- DataSet,DataTable与DataRow复制方法
- DataSet,DataTable与DataRow的复制方法
- 单态设计模式遇到的多线程解决办法
- Windows Azure 资源配置所允许的角色数量增至25
- MS SQL注入碰到关键词被过滤后的解决思路
- Linux内核中task_struct的中文介绍(2.4内核的)
- Linux图书分类
- DataSet,DataTable.DataRow复制(解决此行已属于另一个表)以及DataTable 实现表结构转换
- 用 GDB 调试程序
- jQuery中使用mouseleave代替mouseout
- Intent方法属性等等
- Lucene:基于Java的全文检索引擎简介
- Silverlight 无法进入调试的问题
- 北京著名景点介绍
- android 再按一次后退键退出应用程序
- [教程] 三星i9000 上网设置(gprs设置和彩信设置)