博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
DataTable.ImportRow()与DataTable.Rows.Add()的区别
阅读量:6246 次
发布时间:2019-06-22

本文共 1276 字,大约阅读时间需要 4 分钟。

今天写代码的时候用到ImportRow()向DataTable中添加记录,代码如下:

DataTable dt = datatable;
DataRow dr = dt.NewRow();
dr["FileName"] = fileName;
dr["DbName"] = DbName;
dt.ImportRow(dr);

可是执行后发现dtAppendix中的记录并没有增加。可是将上述红色色代码换成dt.Rows.Add(dr);就可以了。后上网查了下资料弄清楚了原因。下面就说一下这两者的用法与区别及其适用情况。
1、首先,我们先说下DataTable.NewRow()方法,这个方法可以创建和表具有相同构架的DataRow(而且必须使用这个方法才能创建和原表一样构架的DataRow),并且这个新行是添加在原表上的。但是我发现这个DataTable中并没有这个空行。为什么?原因是这样的:原来Datatable中Rows都一个RowState属性,共有如下几种:
1,Detached 该行已被创建,但不属于任何 DataRowCollection。DataRow 在以下情况下立即处于此状态:创建之后添加到集合中之前;或从集合中移除之后。
2,Unchanged 该行自上次调用AcceptChanges以来尚未更改。
3,Added 该行已添加到DataRowCollection中,AcceptChanges尚未调用。
4,Deleted 该行已通过DataRow的Delete方法被删除。
5,Modified 该行已被修改,AcceptChanges尚未调用。
其实NewRow()创建的行其RowState是Detached,显而易见新建的行是不可见。

2、ImportRow()
将DateRow复制到DataTable中,保留任何属性设置以及初始值和当前值。但是当DataRow的RowState属性为Detached时无法复制,所以可见上述红色代码不可行了。网上有人说不能复制是因为新建的行隶属于原表,我认为这是不正确,究其原因很是因为行的属性。其实如果我们把行的属性改变的话,ImportRow()方法还是可行的。
ImportRow()一般用于将一个表中的数据复制到另一个表中。实例代码如下:

DataTable dtNew = dt.Clone();
foreach (DataRow dr in dt.Rows)
{
dtNew.ImportRow(dr);
}
 
如果真的想使用ImportRow(),可以先增加一个空行,这样操作:
DataTable dt = datatable;
DataRow dr = dt.NewRow();
dr["FileName"] = fileName;
dr["DbName"] = DbName;
dt.Row.add();
dt.ImportRow(dr);

转载于:https://www.cnblogs.com/ChineseMoonGod/p/6678789.html

你可能感兴趣的文章
历时30年探索牛顿之谜,中国科学家测出迄今最高精度万有引力常数值!
查看>>
「mysql优化专题」你们要的多表查询优化来啦!请查收(4)
查看>>
微软良心之作——Visual Studio Code 开源免费跨平台代码编辑器
查看>>
1-机器学习启蒙- Python基础语法与工具
查看>>
6-Flask构建弹幕微电影网站-博客小项目学完flask基础
查看>>
zookeeper的图形化展示
查看>>
用Electron创建跨平台应用(第二弹)开启多窗口
查看>>
类似gitbook的wiki选择
查看>>
java -----------------LeetCode——电话号码的字母组合
查看>>
Java 学习(12)--接口
查看>>
特斯拉又熬过破产危机后,马斯克说自动驾驶芯片已经准备好了
查看>>
单机单网卡最大tcp长连接数真的是65535吗?
查看>>
ubutu系统 安装eclipse
查看>>
JavaScript正则表达式元字符总结
查看>>
Awesome Python
查看>>
ubuntu14.04安装opencv2.4.10
查看>>
Windows 7 延长支持服务价格曝光:一台电脑最低25美元
查看>>
64 位设备上抛弃 32 位安卓应用,谷歌公布了具体日期
查看>>
你还在为20倍的连麦成本发愁吗?
查看>>
【SQLServer】【恢复挂起的解决方案】附加文件时候的提示“无法重新生成日志,原因是数据库关闭时存在打开的事务/用户,该数据库没有检查点或者该数据库是只读的。 ”【数据库恢复】...
查看>>