簡體   English   中英

用於創建存儲過程的 SQL 選擇查詢在 asp.net 中不起作用

[英]SQL select query for creating a stored procedure doesn't work in asp.net

我正在嘗試使用 C# asp.net 在 Visual Studio 中創建一個存儲過程。 程序是這樣的:

    SqlConnection connection = new SqlConnection(...);
    SqlCommand command = new SqlCommand();

    try
    {
        connection.Open();
        command.CommandType = CommandType.Text;
        command.CommandText = "CREATE PROCEDURE NumberOfPatientsWithAChosenDiagnosis(@diagnosis VARCHAR, @numberOfPatients INT OUTPUT) AS SELECT * FROM Patients WHERE diagnosis = '@diagnosis' " + "SELECT @numberOfPatients = COUNT(*) FROM Patients WHERE diagnosis = '@diagnosis'";
        command.Connection = connection;
        command.ExecuteNonQuery();
        tb_procedure.Text = "The procedure \"NumberOfPatientsWithAChosenDiagnosis\" was created with success!";
    }
    catch (Exception ex)
    {
        tb_procedure.Text = "Error at creating the procedure!\n" + ex.Message;
    }
    finally
    {
        connection.Close();
    }

我有一個 DropDownList,其中包含表中的所有診斷。 問題是,當我使用從 DropDownList 中選擇的診斷測試該過程時,它顯示我 0 結果,即使有所選診斷的記錄。 例如,如果我將參數 '@diagnosis' 替換為 'flu',則該程序運行良好,它會返回流感患者的確切數量。 我寫錯了什么? 謝謝!

您正在使用僅VARCHAR類型定義參數@diagnosis並缺少定義其大小。 如果沒有大小,則假定您需要一個VARCHAR(1) ,因此參數中只會設置一個字符。

因此,每次調用存儲過程並嘗試使用“flu”之類的字符串設置@diagnosis參數時,SP 只會收到字母“f”。 您將一無所獲,因為沒有用單個“f”字母定義的診斷。

只需在創建該參數時添加大小

command.CommandText = @"CREATE PROCEDURE NumberOfPatientsWithAChosenDiagnosis
       (@diagnosis VARCHAR(100), .....

您的 sql 代碼中還有另一個錯誤。 您將參數放在單引號之間。 這是一個文字字符串,它不再是參數占位符。
您需要刪除使用@diagnosis參數的地方周圍的單引號。 最后,如果您只想計算具有給定診斷的患者數量,則不需要第一個 sql SELECT。

command.CommandText = @"CREATE PROCEDURE NumberOfPatientsWithAChosenDiagnosis
            (@diagnosis VARCHAR(100), @numberOfPatients INT OUTPUT) 
            AS 
            -- Not needed ==> SELECT * FROM Patients WHERE diagnosis = @diagnosis;
            SELECT @numberOfPatients = COUNT(*) 
            FROM Patients 
            WHERE diagnosis = @diagnosis";

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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