有张表,Sid是主键,自增的,还有个name字段
下面是部分代码
ManualSign mas = new ManualSign();//实体类
mas.Name="sdsdf";
int result=msr.AddManualSign(mas);//调用插入数据方法
if(result==1)
{
int ID=mas.Sid;
}
我调试以后发现每次mas.Sid都是0, int ID=mas.Sid;并没有得到数据库里该条记录的Sid的真实值。
请问这个问题要怎么解决呢?
请指教~谢谢~
下面是部分代码
ManualSign mas = new ManualSign();//实体类
mas.Name="sdsdf";
int result=msr.AddManualSign(mas);//调用插入数据方法
if(result==1)
{
int ID=mas.Sid;
}
我调试以后发现每次mas.Sid都是0, int ID=mas.Sid;并没有得到数据库里该条记录的Sid的真实值。
请问这个问题要怎么解决呢?
请指教~谢谢~
不过我的做法可以和楼主说一下string cmdText = "insert into XXx values(xxx);select scope_identity()";
SqlCommand cmd = new SqlCommand(cmdText,conn);
int newID = Convert.ToInt32(cmd.ExecuteScalar());这样可以得到自增ID
如:
CREATE PROCEDURE 存储过程名
@EmployeeID int,
--参数列表
@State int OUTPUT
AS
DECLARE @新ID int
BEGIN
BEGIN TRAN
INSERT INTO 表名(...)---插入动作
SET @新ID = SCOPE_IDENTITY();
--再用这个新ID进行余下操作
IF @@error <> 0
BEGIN
SET @State = 0;
ROLLBACK TRAN
END
ELSE
BEGIN
SET @State = 1;
COMMIT TRAN
END
END
/// <summary>
/// 增加一条数据
/// </summary>
public int Add(ManualSign model)
{
string sql = string.Format("INSERT INTO ManualSign VALUES('{0}','{1}','{2}',{3})",model .UserId ,model .SignTime ,model .SignDesc ,model .SignTag );
SqlCommand com = new SqlCommand();
com.CommandText = sql;
int result = (new DataOperator()).Modify(com);
return result;
}这个是我调用的
ManualSign mas = new ManualSign();
mas.SignDesc = "sdfasd";
mas.UserId = "fasdfsa";
//.....
ManualSignRule msr = new ManualSignRule();//业务逻辑层
int result =msr.Add(mas);
if(result==1)
{
int ID=mas.Sid;
}
mas.Sid是对应数据表里的自增主键Sid
如果要用max(Sid)的话那不是要查数据库?
1.Sql查询是否查出id
2.在AddManualSign方法里面是否更新了mas.Sid
执行以后数据库Sid已经了,我执行成功后用mas.Sid并不是调用数据库里的Sid,而是获得实体类里的未赋值的mas.Sid的意思吗?那是不是不论如何我就是要再查一次数据库?
是的,你数据库生成的id并不会自动放入mas.Sid,这是一种做法供参考
string cmdText = "insert into XXx values(xxx);select scope_identity()";
SqlCommand cmd = new SqlCommand(cmdText,conn);
mas.Sid = Convert.ToInt32(cmd.ExecuteScalar()); 后面的select scope_identity()用于获取,前面那句insert产生的id
output
@@identity(这个就是你最后插入的标识)即可性能高且简单
SqlHelper里面有类似的这个方法
object ExecuteScalar(string str)调用的时候SqlHelper.ExecuteScalar("insert into XXx values(xxx);select scope_identity()");
返回值就是id了
SqlHelper?是自动生成代码之类会有的东西吗?
存储过程和数据层的东西还有SQL我都不怎么行- -呵呵呵~~
使用的时候用FindControl
然后在程序中用sql参数获取
插入数据后
select max(id) from table1
获取数据