[英]ASP.NET Stored Procedure method not working
我有這種方法正在調用存儲過程:
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
請幫忙! 我無法調試此消息,因為該數據庫僅在我要推送到的服務器上工作,而我無權訪問此服務器。
在sql server中創建SP的語法為:
CREATE PROCEDURE [schema].[procName]
@param1 int,
@param2 bit
AS
BEGIN
-- SP Logic
declare @someVar int, -- note this is a variable, not a parameter.
@anotherVar varchar(10)
-- select, updates, deletes, etc
END
您發布為proc定義(不完整)的內容沒有參數名稱@TG
,而是變量。 如果您使用參數而不是變量將過程更正為遵循上述示例,則應該可以解決您的直接問題。
此外,根據您的代碼注釋,您似乎正在嘗試使用輸出參數。 需要在SP聲明中設置這些參數(就像正常參數一樣),但要使用out
或output
修飾符。
看來您想要這樣的東西:
create procedure mySpName
@TG int, -- input parameter
@L1R nchar(10) out, -- output parameter -- Label1 Return Variable
@L2R nchar(10) out, -- Label2 Return Variable
@L3R nchar(10) out, -- Label3 Return Variable
@L4R nchar(10) out, -- Label4 Return Variable
@LD1R nchar(15) out, -- LData1 Return Variable
@LD2R nchar(15) out, -- LData2 Return Variable
@LD3R nchar(15) out, -- LData3 Return Variable
@LD4R nchar(15) out -- LData4 Return Variable
AS
BEGIN
-- SP body
END
要在c#代碼中使用參數,可以使用以下示例:
添加參數:
SqlParameter output = new SqlParameter("@L1R", SqlDbType.NVarChar);
output.Direction = ParameterDirection.Output;
cmd.Parameters.Add(output);
讀取參數:
string L1R = cmd.Parameters["@L1R"].Value.ToString();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.