百度首页 | 百度空间
 
查看文章
 
C# + 存储过程实现获得添加记录的ID
2007-12-15 21:57

首先是存储过程:

USE [VisualWar]

GO

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

ALTER PROCEDURE [dbo].[User_Reg]

@TRIBEID bigint,

@USERNAME nvarchar(128),

@USERPASSWORD nvarchar(128),

@USERQUESTION nvarchar(128),

@USERANSWER nvarchar(128),

@USEREMAIL nvarchar(128),

@ACTIVATIONSTRING nvarchar(128)

AS

BEGIN

    SET NOCOUNT ON;

    INSERT INTO

    U_User(

    TribeID,

    UserName,

    UserPassword,

    UserQuestion,

    UserAnswer,

    UserEmail,

    ActivationString

    )

    VALUES(

    @TRIBEID,

    @USERNAME,

    @USERPASSWORD,

    @USERQUESTION,

    @USERANSWER,

    @USEREMAIL,

    @ACTIVATIONSTRING

    )

END

RETURN @@IDENTITY

我想不用过多解释,主要是最后以行的返回值。

然后具体代码:

        public long Reg(long tribeID, string userName, string userPassword, string userQuestion, string userAnswer, string userEmail, string activationString)

        {

            long userID = 0;

            DataSet dsUser = new DataSet();

            SqlConnection regConn = Conn;

            SqlCommand scSelect = new SqlCommand("User_Reg", regConn);

            scSelect.CommandType = CommandType.StoredProcedure;

            scSelect.Parameters.Add("@TRIBEID", SqlDbType.BigInt);

            scSelect.Parameters.Add("@USERNAME", SqlDbType.NVarChar, 128);

            scSelect.Parameters.Add("@USERPASSWORD", SqlDbType.NVarChar, 128);

            scSelect.Parameters.Add("@USERQUESTION", SqlDbType.NVarChar, 128);

            scSelect.Parameters.Add("@USERANSWER", SqlDbType.NVarChar, 128);

            scSelect.Parameters.Add("@USEREMAIL", SqlDbType.NVarChar, 128);

            scSelect.Parameters.Add("@ACTIVATIONSTRING", SqlDbType.NVarChar, 128);

          scSelect.Parameters.Add(new SqlParameter("ReturnID", SqlDbType.Int, 4, ParameterDirection.ReturnValue, false, 0, 0, string.Empty, DataRowVersion.Default, null));

            scSelect.Parameters["@TRIBEID"].Value = tribeID;

            scSelect.Parameters["@USERNAME"].Value = userName;

            scSelect.Parameters["@USERPASSWORD"].Value = userPassword;

            scSelect.Parameters["@USERQUESTION"].Value = userQuestion;

            scSelect.Parameters["@USERANSWER"].Value = userAnswer;

            scSelect.Parameters["@USEREMAIL"].Value = userEmail;

            scSelect.Parameters["@ACTIVATIONSTRING"].Value = activationString;

            try

            {

                regConn.Open();

                scSelect.ExecuteNonQuery();

              userID = Convert.ToInt64(scSelect.Parameters["ReturnID"].Value);

          }

            catch (Exception ex)

            {

                dsUser = null;

                throw ex;

            }

            finally

            {

                regConn.Close();

            }

            return userID;

        }

关键是粗体部分的。


类别:c# 技术 | 添加到搜藏 | 浏览() | 评论 (4)
 
最近读者:
 
网友评论:
1
2007-12-19 17:09
这个是在vs2005下写的还是在vs2008下写的?刚开始的那几句是sql语言么?
 
2
2007-12-20 14:35
vs2005 vs2008写这个方法没区别,开头的是存储过程
 
3
2008-04-08 22:47
嗯 不过还可以用另外一种方法
USE [VisualWar]

GO

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

Create PROCEDURE [dbo].[User_Reg]

@TRIBEID bigint,

@USERNAME nvarchar(128),

@USERPASSWORD nvarchar(128),

@USERQUESTION nvarchar(128),

@USERANSWER nvarchar(128),

@USEREMAIL nvarchar(128),

@ACTIVATIONSTRING nvarchar(128),
@UserID int output

AS

BEGIN

SET NOCOUNT ON;

INSERT INTO

U_User(

TribeID,

UserName,

UserPassword,

UserQuestion,

UserAnswer,

UserEmail,

ActivationString

)

VALUES(

@TRIBEID,

@USERNAME,

@USERPASSWORD,

@USERQUESTION,

@USERANSWER,

@USEREMAIL,

@ACTIVATIONSTRING

)
Select @UserID=@@identity

END

 
4
2008-09-21 16:05
@@identity是全局的,可能会出问题的,我们以前开发都是用scope_identity
 
发表评论:
姓 名:
网址或邮箱: (选填)
内 容:
验证码:
 

     

©2008 Baidu