簡體   English   中英

ASP.NET存儲過程方法不起作用

[英]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聲明中設置這些參數(就像正常參數一樣),但要使用outoutput修飾符。

看來您想要這樣的東西:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM