我正在尝试从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"/>
并且这些存储过程非常相似。
答案 0 :(得分:2)
存储过程没有指定任何输出参数,因此这不起作用。 SPROC中的参数需要声明如下:
declare @L1R nchar(10) output
如果不能改变它,这对你不起作用。