日期:2014-05-18  浏览次数:20760 次

找出插入数据的主键
我在数据集里写了这条语句
INSERT   INTO   [dbo].[AddressGroup]   ([GroupName],   [OwnerId])   VALUES   (@GroupName,   @OwnerId);
SELECT   GroupName,   GroupId,   OwnerId   FROM   dbo.AddressGroup   WHERE   (GroupId   =   SCOPE_IDENTITY())
然后在调用,但是怎么查出我插入的记录的ID啊,我的ID是主键,是自动生成的

------解决方案--------------------
SCOPE_IDENTITY()是正确的
------解决方案--------------------
首先编写好一有返回值的存储过程
create procedure proc_name
@para1 nchar(20), --输入参数
@para2 int = null out --输出参数,供程序使用
as
set nocount on
if ( not exists (select * from employee where em_name=@para1))
begin
insert into employee(name) values(@para1)
select @para2=@@identity --返回添加记录的ID
return 1 --返回是否成功添加数据
end
else
return 0 --返回失败
go
然后是调用存储过程的方法
sqlcommand command;
command = new sqlcommand(proc_name,new sqlconnection(connectionstr));
command.paraments.add( "@para1 "), "name1 "); //输入参数,职员姓名
command.paraments.add(new sqlparament( "@para2 ", //生成一输出参数
SqlDbType.Int;             //参数数据类型
ParamenterDirection.OutPut,      //输入输出类型
0,
0,
string.Emplty,
DataRowVerstion.Default,
null)                 //参数值,输入参数时需提供
);
command.commandtype=commandtype.StoredProcedure;
command.connection.open();
command.executenonQuery();
int pkid=(int)command.Parameters[ "@para2 "].value; //得到输出参数的值
command.connection.close();
此处是引用输出参数,如果要引用返回值(是否成功添加数据)则只需把ParamenterDirection的类型改为returnvalue;再自己改一个参数名就可以了.
------解决方案--------------------
在我骗写程序的过程中,遇到这种情况,一般在数据表中加一个字段,这个字段能唯一标识一行记录
string stridetity = System.GUID.newGuID();
然后执行数据库插入操作,
在通过 stridetity 从表中查出刚才插入的记录,得到ID
------解决方案--------------------
取自动增长的表的下一个ID号


public static Int32 GetNextId(string tableName)
{
//throw new System.NotImplementedException();
Int32 newProdID = 0;
try
{
string sqlstring = "SELECT IDENT_CURRENT(@table) + (SELECT IDENT_INCR(@table)) ";
SqlCommand sqlcmd = new SqlCommand(sqlstring, cnn);
sqlcmd.Parameters.Add(new SqlParameter( "@table ", tableName));
if (cnn.State == ConnectionState.Open)
{
cnn.Close();
}
cnn.Open();
newProdID = Convert.ToInt32(sqlcmd.ExecuteScalar());
}
catch (Exception ex)
{
MessageBox.Show( "此表不存在! " + ex.Message, "系统提示 ", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
finally
{
cnn.Close();
}
return newProdID;
}