问题描述
各位大师,请教返回自增值的问题,请大师们指教!我的后台代码:publicvoidSave(){SqlParameter[]SavePar=newSqlParameter[]{newSqlParameter("@ID",this.id.ToString()),newSqlParameter("@GOODZQMBID",this.GOODZQMBID),newSqlParameter("@goodsid",this.goodsid),newSqlParameter("@mcorder",this.mcorder),newSqlParameter("@zqmbid",this.zqmbid),newSqlParameter("@width",this.width),newSqlParameter("@height",this.height),newSqlParameter("@AddTime",DateTime.Now.ToString("yyyy-MM-ddHH:mm:ss"))};DataProviderSaveCon=newDataProvider();;if(this.id==0){SaveCon.ExecuteNonQuery("insertintoMc_GoodsZQMB(goodsid,zqmbid,width,height,AddTime,mcorder)values(@goodsid,@zqmbid,@width,@height,@AddTime,@mcorder);select@GOODZQMBID=@@IDENTITY;",SavePar);GOODZQMBID=???//把自增值给GOODZQMBID,我应该如何写?(ExecuteScalar()是无效的,它要求加入string,即ExecuteScalar(stringcommandtext)这样的格式)}
解决方案
解决方案二:
把select@GOODZQMBID=@@IDENTITY拿出来,单独执行。
解决方案三:
好麻烦啊,用EF啊。。
解决方案四:
不应该用 ExecuteNonQuery
解决方案五:
引用1楼guwei4037的回复:
把select@GOODZQMBID=@@IDENTITY拿出来,单独执行。
SaveCon.ExecuteNonQuery("insertintoMc_GoodsZQMB(goodsid,zqmbid,width,height,AddTime,mcorder)values(@goodsid,@zqmbid,@width,@height,@AddTime,@mcorder)",SavePar);SaveCon.ExecuteNonQuery(select@GOODZQMBID=@@IDENTITY);这样是吗?然后怎么写啊?GOODZQMBID=???
解决方案六:
直接执行select@@IDENTITY
解决方案七:
引用5楼guwei4037的回复:
直接执行select@@IDENTITY
请问直接SaveCon.ExecuteNonQuery("select@@IDENTITY");如何取得值啊?
解决方案八:
不要用ExecuteNonQuery,用ExecuteScale(返回第一行第一列的值的方法)。
解决方案九:
引用7楼guwei4037的回复:
不要用ExecuteNonQuery,用ExecuteScale(返回第一行第一列的值的方法)。
GOODZQMBID=SaveCon.ExecuteScalar("SELECT@@IDENTITY");无法将object转化为int
解决方案十:
强制转换一下。。。
解决方案十一:
引用9楼guwei4037的回复:
强制转换一下。。。
GOODZQMBID=Convert.ToInt32(SaveCon.ExecuteScalar("SELECT@@IDENTITY"));对象不能从DBNull转换为其他类型
解决方案十二:
objectobj=SaveCon.ExecuteScalar("SELECT@@IDENTITY");if(obj!=null){GOODZQMBID=Convert.ToInt32(SaveCon.ExecuteScalar("SELECT@@IDENTITY"));}
解决方案十三:
引用11楼guwei4037的回复:
objectobj=SaveCon.ExecuteScalar("SELECT@@IDENTITY");if(obj!=null){GOODZQMBID=Convert.ToInt32(SaveCon.ExecuteScalar("SELECT@@IDENTITY"));}
对象不能从DBNull转换为其他类型。源错误:GOODZQMBID=Convert.ToInt32(SaveCon.ExecuteScalar("SELECT@@IDENTITY"));
解决方案十四:
using(SqlConnectionconn=newSqlConnection()){conn.ConnectionString="server=.;uid=sa;pwd=123456;database=test;";conn.Open();SqlCommandcmd=newSqlCommand("insertintotest(name)values('hello21')",conn);cmd.ExecuteNonQuery();cmd.CommandText="select@@IDENTITY";objectobj=cmd.ExecuteScalar();if(obj!=null){Console.WriteLine(obj.ToString());}}
解决方案十五:
引用13楼guwei4037的回复:
using(SqlConnectionconn=newSqlConnection()){conn.ConnectionString="server=.;uid=sa;pwd=123456;database=test;";conn.Open();SqlCommandcmd=newSqlCommand("insertintotest(name)values('hello21')",conn);cmd.ExecuteNonQuery();cmd.CommandText="select@@IDENTITY";objectobj=cmd.ExecuteScalar();if(obj!=null){Console.WriteLine(obj.ToString());}}
请问还有其它办法么?
解决方案:
先执行插入语句。然后执行查询语句:selectmax(id)from表名。
解决方案:
http://blog.csdn.net/apollokk/article/details/34804035
解决方案:
引用16楼apollokk的回复:
http://blog.csdn.net/apollokk/article/details/34804035
能不能通过代码实现?