有没有book?
解决方案 »
- 如何实现c#winform下mschart放大缩小功能
- 为什么VS2008的XSD没有了设计器?
- 如何将System.IO.Stream保存为本地文件?
- C#操作数据库的经典问题(续)--帮我看看问题出在那里
- 一段非常实用的代码,文件加密
- 关于axWebBrowser刷新问题,找遍所有贴子和网,没发现有解决此问题的答案,在这里请高手帮忙,不胜感激
- 各位高手:请位如保不保留text控件之前输入的内容!
- 帮我看看这个问题好吗?非常感谢!
- 如果只应用于windows平台,c#程序可以编译为非受控执行程序吗?这样是不是在效率上会同于vc了,或适用领域也可同于vc
- 在windows form下,怎样为datagrid添加click事件?
- 一个AD操作的path问题,高手帮忙!
- 如何用正则表达式 替换book.comment.list.jsp_book_no=142545&page_no=1中的.jsp后边的下横 线 '_'为'?'
DataColumn dc = dt.Columns["id"];//这一列对应的数据库中的表字段是自增列,
在内存DataTable中进行批输入更新时不能马上得到新输入的上一条记录的主键,
所以建立临时唯一主键如下:
dc.AutoIncrement = true;//设置该列为自增长,
dc.AutoIncrementSeed = -1;//新增列的初始值。
dc.AutoIncrementStep = -1;//列的值自动递增的数值。默认为 1。
这样你添加第一条新增数据的时候临时主键为-1,
第二条为-2,
...
在使用DataAdapter.Update(dt);进行更新的时候,
如果数据源是Sql Server那使用存储过程输出参数把自增主键输出会自动更新新增的DataRow,
比如上面的-1,-2,-3等自动会更新成实际数据库中的自增主键值。
这种方式具体可以看我的一片文章,
http://blog.csdn.net/zhzuo/archive/2004/08/06/67037.aspx
如果是Access或其他数据库就有点麻烦,回填实现如下:
注册DataAdapter.RowUpdated事件。
da.RowUpdated += new OleDbRowUpdatedEventHandler(da_RowUpdated);
事件处理程序,
private static void da_RowUpdated(object sender, OleDbRowUpdatedEventArgs e)
{
if(e.Status == UpdateStatus.Continue && e.StatementType = StatementType.Insert)
{
OleDbConnection conn = new OleDbConnection("连接字符串");
OleDbCommand comm = new OleDbCommand("SELECT @@IDENTITY",conn);
conn.Open();
e.Row["id"] = (int)comm.ExecuteScalar();//得到最新递增值更新到内存DataTable中刚更新的DataRow.
e.Row.AcceptChanges();
conn.Close();
}
}
//处理程序中的每次生成conn,和comm没有必要,你可以只初始化一次,这里这么写只是为了说明过程,而且也没有必要多次打开或关闭连接。