首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

利用存储过程得到新增数据的ID,该如何处理

2012-02-27 
利用存储过程得到新增数据的ID数据库中有自增字段UID存储过程如下:CREATEPROCEDUREAddUser(@Usernamenvarc

利用存储过程得到新增数据的ID
数据库中有自增字段UID

存储过程如下:

CREATE           PROCEDURE       AddUser      
(      
@Username                       nvarchar(50),      
@Email                   nvarchar(100),      
@Password       nvarchar(50),      
@UserID               int       OUTPUT      
)      
AS      
INSERT       INTO       Users      
(      
                    Username,      
                    Email,      
                    Password      
    )      
       
    VALUES      
    (      
                    @Username,      
                    @Email,      
                    @Password      
    )      
       
    SELECT      
                    @UserID       =       @@Identity      
    GO  

程序如下:
SqlCommand   cmd=new   SqlCommand( "AddUser ",conn);
cmd.CommandType=CommandType.StoredProcedure;
cmd.Parameters.Add(new   SqlParameter( "@Username ",Username));
cmd.Parameters.Add(new   SqlParameter( "@Email ",Email));
cmd.Parameters.Add(new   SqlParameter( "@Password ",Password));

然后如何得到刚刚插入记录的UID的值呢?
在这里我写不下去了,望大哥们指教.......

[解决办法]
indentdy UserID

CREATE PROCEDURE AddUser
(
@UserID int OUTPUT
@Username nvarchar(50),
@Email nvarchar(100),
@Password nvarchar(50),

)
[解决办法]
indentdy UserID

CREATE PROCEDURE AddUser
(
@UserID int ,
@Username nvarchar(50),
@Email nvarchar(100),
@Password nvarchar(50),

)

[解决办法]
SqlCommand cmd=new SqlCommand( "AddUser ",conn);
cmd.CommandType=CommandType.StoredProcedure;
cmd.Parameters.Add(new SqlParameter( "@Username ",Username));
cmd.Parameters.Add(new SqlParameter( "@Email ",Email));
cmd.Parameters.Add(new SqlParameter( "@Password ",Password));
cmd.parameters.add(new sqlparameter( "@UserID ",sqltype.int);
cmd.parameters[ "@userid "].direction = Direction.output;

CMD执行

int UID;
UID = cmd.Parameters[ "@userid "];
------解决方案--------------------


大致是这样的吧,你调试一下试试:
SqlCommand cmd = new SqlCommand( "AddUser ", conn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(new SqlParameter( "@Username ", Username));
cmd.Parameters.Add(new SqlParameter( "@Email ", Email));
cmd.Parameters.Add(new SqlParameter( "@Password ", Password));

SqlParameter outPara = new SqlParameter( "@UserID ", SqlDbType.Int);
outPara.Direction = ParameterDirection.Output;
cmd.Parameters.Add(outPara);


if (cmd.ExecuteNonQuery() > -1)
{
if (outPara.Value is int)
{
int retValue = (int)outPara.Value;
}
}
[解决办法]
命名空间???

这里是个属性哎...

你用的VS2005吗?
[解决办法]
SqlParameter.Direction 属性
获取或设置一个值,该值指示参数是只可输入、只可输出、双向还是存储过程返回值参数。

属性值
ParameterDirection 值之一。默认为 Input。
Input 参数是输入参数。
InputOutput 参数既能输入,也能输出。
Output 参数是输出参数。
ReturnValue 参数表示诸如存储过程、内置函数或用户定义函数之类的操作的返回值。

[解决办法]
create table #
(
id int identity(1,1),
[value] int
)

insert into #([value]) values(100)
select scope_identity()

insert into #([value]) values(100)
select scope_identity()

insert into #([value]) values(100)
select scope_identity()

drop table #
[解决办法]
不知道,这个属性VS2003就是有的.
[解决办法]
using System.Data;
[解决办法]
别忘了 return 回value
[解决办法]
如果是这个具体的问题,根本就不需要输出参数和返回值!!!

CREATE PROCEDURE AddUser
(
@Username nvarchar(50),
@Email nvarchar(100),
@Password nvarchar(50),
)
AS
INSERT INTO Users
(
Username,
Email,
Password
)

VALUES
(
@Username,
@Email,
@Password
) ;SELECT @@Identity
GO


直接用获取单值的方法拿值就行了~~~ 就像 SELECT psw FROM Usr WHERE Uid = 'me ' 一样。

热点排行