SQL Server存储过程包含2个输入参数和8个输出参数

时间:2015-09-27 03:37:01

标签: c# asp.net sql-server stored-procedures

我正在尝试从ASP.NET&amp ;;运行SQL Server存储过程。 C#有2个输入和8个输出参数,如下所示:

public List<BarcodeClass> CheckTagId(int tagId, string deviceId)
{
    barcodes = new List<BarcodeClass>();

    try
    {
        using (SqlCommand command = new SqlCommand("uspCheckTagId", connection))
        {
            command.CommandType = CommandType.StoredProcedure;
            SqlParameter parameter = new SqlParameter("@TG", SqlDbType.Int)
            {
                        Direction = ParameterDirection.Input,
                        Value = tagId
            };
            command.Parameters.Add(parameter);

            SqlParameter parameterTwo = new SqlParameter("@DeviceId", SqlDbType.NVarChar)
            {
                        Direction = ParameterDirection.Input,
                        Value = deviceId
            };
            command.Parameters.Add(parameterTwo);

            SqlParameter output = new SqlParameter(@"L1R", SqlDbType.NChar);
            output.Direction = ParameterDirection.Output;
            command.Parameters.Add(output);

            SqlParameter output2 = new SqlParameter(@"L2R", SqlDbType.NChar);
            output2.Direction = ParameterDirection.Output;
            command.Parameters.Add(output2);

            SqlParameter output3 = new SqlParameter(@"L3R", SqlDbType.NChar);
            output3.Direction = ParameterDirection.Output;
            command.Parameters.Add(output3);

            SqlParameter output4 = new SqlParameter(@"L4R", SqlDbType.NChar);
            output4.Direction = ParameterDirection.Output;
            command.Parameters.Add(output4);

            SqlParameter output5 = new SqlParameter(@"LD1R", SqlDbType.NChar);
            output5.Direction = ParameterDirection.Output;
            command.Parameters.Add(output5);

            SqlParameter output6 = new SqlParameter(@"LD2R", SqlDbType.NChar);
            output6.Direction = ParameterDirection.Output;
            command.Parameters.Add(output6);

            SqlParameter output7 = new SqlParameter(@"LD3R", SqlDbType.NChar);
            output7.Direction = ParameterDirection.Output;
            command.Parameters.Add(output7);

            SqlParameter output8 = new SqlParameter(@"LD4R", SqlDbType.NChar);
            output8.Direction = ParameterDirection.Output;
            command.Parameters.Add(output8);

            connection.Open();

            SqlDataReader reader = command.ExecuteReader();

            while (reader.Read())
            {

            }
        }
    }
    finally
    {
        connection.Close();
    }

    return barcodes;
}

这是对的吗?当我运行此代码时,我只收到此错误消息:

  

发生错误

没有别的......很奇怪。无论如何,这段代码看起来不起作用,我无法调试,因为数据库只能访问我推送的服务器。

这是存储过程...

declare @TG int
declare @DeviceId nvarchar(30)
declare @L1R nchar(10) -- Label1 Return Variable
declare @L2R nchar(10) -- Label2 Return Variable
declare @L3R nchar(10) -- Label3 Return Variable
declare @L4R nchar(10) -- Label4 Return Variable
declare @LD1R nchar(15) -- LData1 Return Variable
declare @LD2R nchar(15) -- LData2 Return Variable
declare @LD3R nchar(15) -- LData3 Return Variable
declare @LD4R nchar(15) -- LData4 Return Variable

set @TG = 10001
set @DeviceId = 'testunitid'

exec uspCheckTagId @TG, @DeviceId, @L1 = @L1R output, @L2 = @L2R output, @L3 = @L3R output,@L4 = @L4R output,  @LD1 = @LD1R output, @LD2 = @LD2R output, @LD3 = @LD3R output, @LD4 =@LD4R output

print @L1R
print @L2R
print @L3R
print @L4r
print @LD1R
print @LD2R
print @LD3R
print @LD4r

我也无法访问数据库,因此无法更改存储过程。

我有这样的其他存储过程:

declare @sp varchar(30)
set @sp ='marksiphoneid'
exec uspCheckDeviceID @sp

当我运行此功能时:

 public List<BarcodeClass> CheckTagId(int tagId, string deviceId)
        {
            barcodes = new List<BarcodeClass>();
            try
            {
                using (connection = new SqlConnection(connectionString))
                {
                    using (SqlCommand command = new SqlCommand("uspCheckDeviceID", connection))
                    {
                        command.CommandType = CommandType.StoredProcedure;
                        SqlParameter parameter = new SqlParameter("@DeviceId", SqlDbType.NVarChar)
                        {
                            Direction = ParameterDirection.Input,
                            Value = deviceId
                        };
                        command.Parameters.Add(parameter);


                        connection.Open();
                        SqlDataReader reader = command.ExecuteReader();
                        while (reader.Read())
                        {

                        }
                    }
                }
            }
            finally
            {
                connection.Close();
            }

            return barcodes;
        }

返回:

<ArrayOfBarcodeClass xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/WebServiceAPI.Models"/>

并且这些存储过程非常相似。

1 个答案:

答案 0 :(得分:2)

存储过程没有指定任何输出参数,因此这不起作用。 SPROC中的参数需要声明如下:

declare @L1R nchar(10) output

如果不能改变它,这对你不起作用。