对于sql server中自增长字段,如何在.net中获得它产生的id号? 对于sql server中自增长字段,如何在.net中获得它产生的id号? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 int i=0;string sqlstr="select max(id) as max_id from tablename";//执行SQL语句;i=reader["max_id"]+1; IDENT_CURRENT返回为任何会话和任何作用域中的指定表最后生成的标识值。 语法IDENT_CURRENT('table_name')参数table_name是将要返回其标识值的表的名称。table_name 的数据类型为 varchar,没有默认值。返回类型sql_variant yanro(小菜鸟) 的方法是不可靠的。用戶一多就不准了。 @@IDENTITY不受限于特定的作用域,IDENT_CURRENT('表名')不受作用域和会话限制,受限于指定的表 用数据集将ID读出来哈!DataSet ds=new DataSet();ds.Tables["表名"].Rows[i]["ID"].ToString().Trim(); 这个问题可以这样来解决,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没有必要,你可以只初始化一次,这里这么写只是为了说明过程,而且也没有必要多次打开或关闭连接。 select @@IDENTITY还可以定义一个out 变量输出 id Mobile Tools在C#中怎么调用?? 在gridview中,下拉框中怎么默认选中从数据库中获取的值 C# 字符串强制转换为整型 求一个格式化浮点数问题~! 请问在DataGrid中如何通过一个点的坐标来确定它所在的GridCell 调用*.mdb数据库提示“无效的索引长度”,应如何解决? 页码置中 请问如何遍历一个实例的所有属性,得到属性的名称和值,是实例不是类型哦 怎样在C#中编程建立SQL数据库和表?(无内容) C#怎么向浏览器的网页三个文本框发送数据 上传图片文件到数据库,奇怪的错怪,请高高高手帮忙!!!急急!!! 如何给windows打包,能给个详细说明吗
string sqlstr="select max(id) as max_id from tablename";
//执行SQL语句;
i=reader["max_id"]+1;
返回为任何会话和任何作用域中的指定表最后生成的标识值。 语法
IDENT_CURRENT('table_name')参数
table_name是将要返回其标识值的表的名称。table_name 的数据类型为 varchar,没有默认值。返回类型
sql_variant
IDENT_CURRENT('表名')不受作用域和会话限制,受限于指定的表
DataSet ds=new DataSet();
ds.Tables["表名"].Rows[i]["ID"].ToString().Trim();
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没有必要,你可以只初始化一次,这里这么写只是为了说明过程,而且也没有必要多次打开或关闭连接。