【发布时间】:2015-09-26 01:56:42
【问题描述】:
我有一个调用存储过程的方法:
public List<BarcodeClass> CheckTagId(int tagId)
{
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);
connection.Open();
SqlDataReader reader = command.ExecuteReader();
while (reader.Read())
{
}
}
}
finally
{
connection.Close();
}
return barcodes;
}
我的问题是这不起作用。我刚刚收到此消息:发生错误。我知道它不是与数据库的连接,因为如果我将存储过程名称更改为另一个存储过程,它不会返回该错误消息。我感觉它与这部分有关:
SqlParameter parameter = new SqlParameter("@TG", SqlDbType.Int)
{
Direction = ParameterDirection.Input,
Value = tagId
};
因为我传入了一个 int,如果我使用另一个带有 NVarChar 的存储过程并传入一个字符串,这将有效!我将 int 作为参数传递的方式有问题吗?
这是存储过程:
declare @TG int
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
exec uspCheckTagId @TG, @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
请帮忙!我无法调试这个,因为数据库只在我推送到的服务器上工作,我无权访问这个服务器。
【问题讨论】:
-
完整的 proc 定义是什么,特别是带有参数声明的顶部?您发布的是变量声明,而不是参数声明。至少在我见过的所有存储过程中。
-
你只添加了一个输入参数,但是从SQL代码中的过程调用来看,输出参数也有8个。
-
捕获实际错误的 catch 块将有助于故障排除。
标签: c# asp.net sql-server stored-procedures