【问题标题】:SQL select query for creating a stored procedure doesn't work in asp.net用于创建存储过程的 SQL 选择查询在 asp.net 中不起作用
【发布时间】:2017-11-01 15:33:11
【问题描述】:

我正在尝试使用 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',则该程序运行良好,它会返回给我流感患者的确切数量。我写错了什么?谢谢!

【问题讨论】:

  • 我不清楚您是否在创建或调用存储过程时遇到问题。

标签: c# sql asp.net drop-down-menu procedure


【解决方案1】:

您定义的参数 @diagnosis 只有 VARCHAR 类型并且缺少定义其大小。如果没有大小,则假定您需要一个 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";

【讨论】:

  • 没错,我没有想到参数不再被解释为参数。现在我已经添加了大小并删除了单引号,它可以完美运行,非常感谢!
猜你喜欢
  • 1970-01-01
  • 2018-03-09
  • 1970-01-01
  • 1970-01-01
  • 2021-02-28
  • 1970-01-01
  • 2021-10-12
  • 1970-01-01
  • 2018-05-07
相关资源
最近更新 更多