c# - SQL SERVER 2005 返回值

标签 c# asp.net sql sql-server tsql

大家好,我有以下存储过程

@UserName varchar(150),
    @UserEmail varchar(300),
    @UserPassword varchar(150), 
    @ContactNumber varchar(150),
    @ContactMobile varchar(150),
    @AreaOfCountry varchar(150),
    @UserId int OUTPUT,
    @AllreadyReg int OUTPUT
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;
    --DECLARE @UserId int, @AllreadyReg int
    IF (SELECT COUNT(UserId) FROM Users WHERE (UserName = @UserName) OR (UserEmail = @UserEmail)) > 0
    BEGIN
        SET @UserId = 0
        SET @AllreadyReg = 1    
    END
    ELSE 
    BEGIN
        INSERT INTO Users (UserName,UserEmail,UserPassword,ContactNumber,ContactMobile,AreaOfCountry) VALUES (@UserName,@UserEmail,@UserPassword,@ContactNumber,@ContactMobile,@AreaOfCountry)
        SELECT @UserId = SCOPE_IDENTITY()
        SET @AllreadyReg = 0    

    END 

但是当我使用它时使用 c# 和 asp.net 它没有返回任何东西,但是当我只是执行它时它确实有一个结果 @UserId 和 @AllreadyReg 但返回值为 0 和一个字段。

我的 C# 代码在下面,但它从来没有任何行

using (SqlConnection con = new SqlConnection(connectionString))
        {
            Response.Write("Line 61");
            using (SqlCommand cmd = new SqlCommand("spR_Register", con))
            {
                Response.Write("line 64");
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.AddWithValue("@UserName", TxtUsername.Text.Trim());
                cmd.Parameters.AddWithValue("@UserEmail", TxtEmail.Text.Trim());
                cmd.Parameters.AddWithValue("@UserPassword", TxtPassword.Text.Trim());
                cmd.Parameters.AddWithValue("@ContactNumber", TxtPhone.Text);
                cmd.Parameters.AddWithValue("@ContactMobile", TxtMobile.Text);
                cmd.Parameters.AddWithValue("@AreaOfCountry", TxtAreaOfCountry.SelectedValue);
                cmd.Parameters.AddWithValue("@UserId", ParameterDirection.Output);
                cmd.Parameters.AddWithValue("@AllreadyReg", ParameterDirection.Output);
                con.Open();
                SqlDataReader reader = cmd.ExecuteReader();
                if (reader.HasRows)
                {
                    Response.Write("line 78");
                    etc etc

谁能帮忙

谢谢

最佳答案

经过编辑:错误是在未选择数据网格的命令上使用 ExecuteReader - 应该使用 ExecuteNonQuery.


这里重要的是如何添加参数。例如:

var alreadyReg = cmd.CreateParameter();
alreadyReg.Direction = System.Data.ParameterDirection.Output;
alreadyReg.ParameterName = "AllreadyReg";
alreadyReg.DbType = DbType.Int32;
cmd.Parameters.Add(alreadyReg);
//...
cmd.ExecuteNonQuery();
//...
int val = (int)alreadyReg.Value;

根据 DbCommand 对象的类型,可能有一个重载在一行中接受所有这些 - 上面假设只是 DbCommand。使用 SqlCommand,您可以稍微简化一下:

var alreadyReg = cmd.Parameters.Add("AllreadyReg", SqlDbType.Int);
alreadyReg.Direction = ParameterDirection.Output;
//...
cmd.ExecuteNonQuery();
//...
int val = (int)alreadyReg.Value

关于c# - SQL SERVER 2005 返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19930642/

相关文章:

java - Java 方法 "Arrays.deepToString()"是打印二维数组最有效的方法吗?

c# - 如何 DllExport 一个 C++ 类以在 C# 应用程序中使用

c# - 如果路径中的目录不存在,CloudFile.Exists()/ExistsAsync() 会抛出 403(未经授权)?

asp.net - ASP.NET 中的多线程

c# - 如何使用 C# 在转发器控件中查找标签值?

asp.net - 如何将消息记录到 Windows Azure 存储?

MySQL 从另一个表插入带有 2 个选项的 WHERE 语句

mysql - 如何找到每个部门中薪水最高的员工?

c# - TreeView 控件中所选元素的条件着色

mysql - 可以使用 SQL 查询获取 "friendly"URL 吗?