为什么用以下语句取不出数据库新增行的标示号呢?大伙给看看

DataService 2006-10-26 04:56:09
try
{
conn.Open();
SqlCommand comm = conn.CreateCommand();
SqlTransaction transaction = conn.BeginTransaction();
comm.Transaction = transaction;

comm.CommandText = "INSERT INTO Dept (DeptName, UpID, StopID) VALUES ('" + deptinfo.DeptName + "', " + deptinfo.UpID + ", " + deptinfo.StopID + ")";
comm.ExecuteNonQuery();

comm.CommandText = "SELECT @@IDENTITY From Dept";
int newDeptID = (int)comm.ExecuteScalar();

transaction.Commit();
conn.Close();

deptinfo.DeptID = newDeptID;
return deptinfo;
}
catch (Exception ex)
{
throw ex;
}
...全文
114 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
DataService 2006-10-27
  • 打赏
  • 举报
回复
结贴
jimh 2006-10-26
  • 打赏
  • 举报
回复
分开执行是可以的,主要是同一个connection就没问题,我一直都是这样做的,不过我只用
SELECT @@IDENTITY,不知道有没有影响
yeerh 2006-10-26
  • 打赏
  • 举报
回复
执行的时候使用
SqlParameter[] parameters = {
new SqlParameter("@CallMainID", SqlDbType.Int,4),
new SqlParameter("@CallCardName", SqlDbType.NVarChar),
};
parameters[0].Direction = ParameterDirection.Output;
parameters[1].Value = "名字";
comm.CommandText = "MC_CallCardMain_ADD";
comm.Parameters.AddRange(parameters );

BaseData.ExecuteNonQuery("MC_CallCardMain_ADD", parameters);
parameters[0].Value即你要的结果
gezichong 2006-10-26
  • 打赏
  • 举报
回复
一个sqlCommand不能使用两次,,可以定义两个sqlCommand.
如:
comm1.CommandText = "INSERT INTO Dept (DeptName, UpID, StopID) VALUES ('" + deptinfo.DeptName + "', " + deptinfo.UpID + ", " + deptinfo.StopID + ")";

comm2.CommandText = "SELECT @@IDENTITY From Dept";
liujia_0421 2006-10-26
  • 打赏
  • 举报
回复
去掉
comm.ExecuteNonQuery();
yeerh 2006-10-26
  • 打赏
  • 举报
回复
你那样得不到的..
使用存储过程来做.

------------------------------------
--用途:增加一条记录
--项目名称:
--说明:
--时间:2006-9-20 11:07:15
------------------------------------
CREATE PROCEDURE MC_CallCardMain_ADD
@CallMainID int output,
@CallCardName nvarchar(32)
AS
INSERT INTO 表名 ([CallCardName)
VALUES(@CallCardName)
set @CallMainID= @@identity
GO
lovvver 2006-10-26
  • 打赏
  • 举报
回复
你的两句sql是分别放在两句执行的:
comm.ExecuteNonQuery();
int newDeptID = (int)comm.ExecuteScalar();

由于需要两次连接数据库,并提交sql语句执行,所以你不可能得到你想要的@@identity的,因为两次执行动作不在一个线程里面。
就好比你在查询分析器里,打开两个窗口,依次分别执行的结果一样。

如果你需要获得@@identity,你可以用存储过程执行插入操作,并用output参数将@@identity返回来。
Knight94 2006-10-26
  • 打赏
  • 举报
回复
如下去写
comm.CommandText = "INSERT INTO Dept (DeptName, UpID, StopID) VALUES ('" + deptinfo.DeptName + "', " + deptinfo.UpID + ", " + deptinfo.StopID + "); "
+ " SELECT @@IDENTITY From Dept";
int newDeptID = (int)comm.ExecuteScalar();

即把两句合为一句进行执行。
lytone52 2006-10-26
  • 打赏
  • 举报
回复
是不是在两个sql之间多加了一句comm.ExecuteNonQuery();

110,535

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧