vc
源代码在线查看: subject_28733.htm
序号:28733 发表者:VC#菜鸟 发表日期:2003-01-23 16:09:24
主题:请高人点拨,如何显示ID值
内容:如图:
返回上页访问论坛
回复者:VC#菜鸟 回复日期:2003-01-23 17:19:20
内容:主要利用SELECT的MAX功能,但是值不能传送到txtjl.Text中,故没法显示,请指点!谢谢!! //点击后,要在txt中显示ID的最后一个记录的id号 private void button1_Click(object sender, System.EventArgs e) { SqlCommand sqlcmd = new SqlCommand("SELECT MAX(id) FROM jltab",sqlConnection1);//在jltab表的id列中选出最大值 SqlDataReader sdr; sqlConnection1.Open(); sdr = sqlcmd.ExecuteReader(); txtjl.Text = sdr["id"].ToString();//将选出的最大值给txtjl.Text,这里系统提示id不正确,为什么呢? sdr.Close(); sqlConnection1.Close(); }
返回上页访问论坛
答案被接受回复者:啊志 回复日期:2003-01-23 19:28:18
内容:txtjl.Text = sdr["id"].ToString();//将选出的最大值给txtjl.Text,这里系统提示id不正确,为什么呢?你要用别名才行: SqlCommand sqlcmd = new SqlCommand("SELECT MAX(id) AS MAX_ID FROM jltab",sqlConnection1);//在jltab表的id列中选出最大值....txtjl.Text = sdr["MAX_ID"].ToString();//就行了-----***********--------但是这样返回最后一个ID有问题,问题在于如果数据库并行操作的话,返回的ID不是你刚才加的那个新纪录的ID,因为你不能保证在“添加新纪录”与“找最大的ID”之间别的并行用户添加新纪录我的办法:添加新纪录用存储过程:比如CREATE PROC new_dailyrecord @p_userid varchar (14) , @p_opti_time datetime=null, @p_record ntext ASif @p_opti_time=null set @p_opti_time=GETDATE( )insert into dailyrecord ( userid , opti_time, record ) values ( @p_userid , @p_opti_time, @p_record )---返回idreturn SCOPE_IDENTITY() ----返回你的此次连接数据库时,最后一个ID,GO然后用COMMAND返回存储过程的返回值取出来最后显示出来
返回上页访问论坛
回复者:VC#菜鸟 回复日期:2003-01-24 09:09:03
内容:谢谢!我按你说的方法弄了一下,没有想到,一下就弄好了。:)而且,从你的建议当中,我还学到了一些东西,比如“数据库并行操作”的问题(这个问题我确实没有考虑到)。看来,我以后要多多用全局的眼光考虑问题,再次感谢!
返回上页访问论坛
回复者:champs 回复日期:2003-01-24 18:34:23
内容:啊志
返回上页访问论坛
回复者:落叶夏日 回复日期:2003-01-29 16:43:08
内容:存储过程如下:CREATE PROCEDURE spCreateNewOrder( @Order_UserID char(2), @Order_From char (2))ASINSERT INTO YHDD_HEAD( Order_UserID, Order_From, Order_date)VALUES ( @Order_UserID, @Order_From, GETDATE())SELECT @@IDENTITYGO我要在程序中得到@@IDENTITY 怎样处理, @@IDENTITY 返回的是关键字程序如下,怎样修改:private void Button1_Click(object sender, System.EventArgs e) { SqlCommand com = new SqlCommand("spCreateNewOrder",sqlConnection1); com.CommandType =CommandType.StoredProcedure; com.Parameters.Add(new SqlParameter("@Order_UserID",SqlDbType.Char,2,"Order_UserID")); com.Parameters["@Order_UserID"].Value ="03"; com.Parameters.Add(new SqlParameter("@Order_From",SqlDbType.Char,2,"Order_From")); com.Parameters["@Order_From"].Value ="02"; sqlConnection1.Open(); com.ExecuteNonQuery(); sqlConnection1.Close(); }1)在存储过程中定义一个output参数例如@a int output将@@IDENTITY赋给@a,并return @a然后用com.Parameters["@a"].Value获得返回的参数,再装箱成你的类型2)明白,我有更好的Object o=com.ExecuteScalar();
返回上页访问论坛
回复者:champs 回复日期:2003-01-29 22:07:48
内容:...... sqlConnection1.Open(); com.ExecuteNonQuery(); sqlConnection1.Close();为什么不是:...... com.Connection.Open(); com.ExecuteNonQuery(); com.Connection.Close();//SqlCommand对象是实现你所需要的功能,??那么打开连接不是应该调用SqlCommand的对象com来Open嘛??..........................................执行....??..........................................关闭.....??
返回上页访问论坛
回复者:落叶夏日 回复日期:2003-01-30 11:09:14
内容:你说的是一样的,在com命令实例中关联了sqlConnection的实例对像,所以实质是一样的
返回上页访问论坛
回复者:落叶夏日 回复日期:2003-01-30 11:11:13
内容:比如你用过: com.Connection = sqlConnection1; com.Connection.Open();//就可以和上面的一样了,在系统数据库的自动设置中已经这样了
返回上页访问论坛