[英]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.