社区
C#
帖子详情
DataTable的插入行数据问题?
secondonsite
2008-05-28 09:34:22
有一DataTable,其中一列ID是自动增量的主键。怎样插入一行新数据?每次插入都报ID列不能为Null,唯一等。
...全文
452
14
打赏
收藏
DataTable的插入行数据问题?
有一DataTable,其中一列ID是自动增量的主键。怎样插入一行新数据?每次插入都报ID列不能为Null,唯一等。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
14 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
etherealkite
2008-05-29
打赏
举报
回复
[Quote=引用 11 楼 secondonsite 的回复:]
Select 字段列表里不列出BledID资增列,我有些更新的行怎么处理?SqlDataAdapter.Update();会把我本意要更新的行也变成插入了。是吗?
[/Quote]
是啊,难道你的主键是BledID列吗?那你在数据库设计的时候就不要设计成自增的,然后在插入数据行时给它赋值,让其自增;如果你硬要设计成自增的话,那就设置其它的列为主键咯。
secondonsite
2008-05-29
打赏
举报
回复
Select 字段列表里不列出BledID资增列,我有些更新的行怎么处理?SqlDataAdapter.Update();会把我本意要更新的行也变成插入了。是吗?
etherealkite
2008-05-29
打赏
举报
回复
Select * From BledAnimalCode这句不要查询全部的出来,不要包含那个自增的列,在添加数据行的时候,不用管。
secondonsite
2008-05-29
打赏
举报
回复
我的想法同上面几位一样,认为BledID为DBNull.Value,插入时DataTable自动填入增量值。这种想法大概是错的,但是我不知道else之后该如何写?
etherealkite
2008-05-29
打赏
举报
回复
BledID列你设定了不允许为空啊,但是你并没有处理它为空的情况啊。你只处理了它不为空的情况
if (this.grdCheckAnimals.Rows[i].Cells["BledID"].Value != DBNull.Value)
{
CheckedRows[ic][0] = this.grdCheckAnimals.Rows[i].Cells["BledID"].Value; //填充DataRow每个列的字段;
}
else 呢?
secondonsite
2008-05-29
打赏
举报
回复
我这也如同汶川。UP
secondonsite
2008-05-29
打赏
举报
回复
谢谢上面各位指点。但是我是忽略ID列的赋值,插入时依然报错,程序如下:
private void UpdateTable()
{
DataSet dsUpdate = ConnDB.ExcCommReturnDSet("Select * From BledAnimalCode");
dsUpdate.Tables[0].PrimaryKey = new DataColumn[] { dsUpdate.Tables[0].Columns["BledID"] };
//dsUpdate.Tables[0].Columns["BledID"].Unique = true;
DataRow[] CheckedRows = new DataRow[this.grdCheckAnimals.Rows.Count]; //使用DataTable.NewRow新建一个DataRow;
int ic = 0; //Checked Bled 的行索引。
for (int i = 0; i < this.grdCheckAnimals.Rows.Count; i++ )
{
if ((int)grdCheckAnimals.Rows[i].Cells["Bled"].Value == 1)
{
CheckedRows[ic] = dsUpdate.Tables[0].NewRow(); //使用DataTable.NewRow新建一个DataRow;
if (this.grdCheckAnimals.Rows[i].Cells["BledID"].Value != DBNull.Value)
{
CheckedRows[ic][0] = this.grdCheckAnimals.Rows[i].Cells["BledID"].Value; //填充DataRow每个列的字段;
}
CheckedRows[ic][1] = this.grdCheckAnimals.Rows[i].Cells["CatalogID"].Value; //填充DataRow每个列的字段;
CheckedRows[ic][2] = this.grdCheckAnimals.Rows[i].Cells["Animal"].Value; //填充DataRow每个列的字段;
CheckedRows[ic][3] = this.grdCheckAnimals.Rows[i].Cells["BledDate"].Value; //填充DataRow每个列的字段;
CheckedRows[ic][4] = this.grdCheckAnimals.Rows[i].Cells["PooledDate"].Value; //填充DataRow每个列的字段;
CheckedRows[ic][5] = this.grdCheckAnimals.Rows[i].Cells["Comments"].Value; //填充DataRow每个列的字段;
if (this.grdCheckAnimals.Rows[i].Cells["BledID"].Value != DBNull.Value) //修改行数据;
{
dsUpdate.Tables[0].BeginLoadData();
dsUpdate.Tables[0].LoadDataRow(CheckedRows[ic].ItemArray, false);
dsUpdate.Tables[0].EndLoadData();
}
else
{
dsUpdate.Tables[0].Rows.Add(CheckedRows[ic]); //将DataRow添加到DataTable的Rows集合——插入新行数据;
//上面这句报错:Column 'BledID' does not allow nulls.
}
ic++;
}
}
ConnDB.UpdateTable("Select * From BledAnimalCode", dsUpdate.Tables[0]);
}
我解释一下程序的大致情况:首先从DataGridView网格控件中筛选CheckedBox选中的行保存。要保存的行有些是数据库里已有的,更新即可。另一些行是数据库没有的,插入数据库。
还有就是数据库有的行但DataGridView没有选中,就要删除数据库的这个行,这条还没写。现解决上面的问题。报错是在
dsUpdate.Tables[0].Rows.Add(CheckedRows[ic]); //Column 'BledID' does not allow nulls.
请高手点拨,再次谢谢!
小可丁儿
2008-05-29
打赏
举报
回复
" dsUpdate.Tables[0].Rows.Add(CheckedRows[ic]); //Column 'BledID' does not allow nulls.
"
数据库不允许为空 你就不能插空的数据阿
else之后的办法是什么呢??
如果是测试环境 就随便给个值或者改一下数据库的设置
secondonsite
2008-05-29
打赏
举报
回复
似乎明白了。有问题再问你,谢谢!结贴
SSXYC
2008-05-28
打赏
举报
回复
不用管他的,保存数据库再作处理
HimeTale
2008-05-28
打赏
举报
回复
直接插入
id无视
zeroes2021
2008-05-28
打赏
举报
回复
DataTable dt = new DataTable();
DataColumn dc = new DataColumn("autoId", typeof(Int32));
dc.AutoIncrement = true;
dc.AutoIncrementSeed = 0;
dc.AutoIncrementStep = 2;
dt.Columns.Add(dc);
DataColumn dc2 = new DataColumn("Name", typeof(string));
dt.Columns.Add(dc2);
DataRow dr = dt.NewRow();
dr["Name"] = "aaaa";
dt.Rows.Add(dr);
调试通过 没有问题
贫僧又回来了
2008-05-28
打赏
举报
回复
ID自增的就不需要插入ID了
wzy_love_sly
2008-05-28
打赏
举报
回复
怎么写的帖出来
DataTable
批量
插入
数据
到SQL Server 2005
在.net中内存表
datatable
用来暂时存储批量
数据
,然后用
数据
集dataset来批量更新
数据
库。一次更新批量
插入
。(C#+.net+SQL Server 2005)
详解C#把
DataTable
中
数据
一次
插入
数据
库的方法
本篇文章主要介绍了详解C#把
DataTable
中
数据
一次
插入
数据
库的方法,具有一定的参考价值,有兴趣的可以了解一下。
DataTable
导出Access、Excel
数据
C#中将
DataTable
数据
导出到Access
数据
库、Excel表,完整示例代码,包含必要的动态链接库
C# datagridview 与
数据
源绑定后对
数据
的,增加,删除,
插入
,更新
C# datagridview 与
数据
源绑定后对
数据
的,增加,删除,
插入
,更新C# datagridview 与
数据
源绑定后对
数据
的,增加,删除,
插入
,更新
c# 对sqlite基本操作,带批量
插入
(百万级秒插)
下载来的资源,自己改了一下,共享出来,供小白使用,本想免费的,无奈最少是2分,再次吐槽一下csdn的下载规则变更,越来越商业化了。
C#
110,547
社区成员
642,561
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章