ASP.NET(C#) 使用存储过程(SQL 数据库)时捕获异常

本文关键字:数据库 SQL 捕获异常 存储过程 NET ASP | 更新日期: 2023-09-27 17:56:22

代码如下...我尝试使用调试点,它显示:

过程或函数"usp_select_legal1_data"需要参数"@tower",但未提供。

C# 代码:

try {
    LegalView.ActiveViewIndex = 2;
    String tw2 = TextBox3.Text;
    SqlDataSource SqlDataSource2 = new SqlDataSource();
    SqlDataSource2.ID = "SqlDataSource2";
    this.Page.Controls.Add(SqlDataSource2);
    SqlDataSource2.ConnectionString = System.Configuration.ConfigurationManager
        .ConnectionStrings["constr"].ConnectionString;
    SqlDataSource2.SelectParameters.Add("@tower", tw2);
    SqlDataSource2.SelectCommand = "usp_select_legal1_data";
    GVCaseTowerWise.DataSource = SqlDataSource2;
    GVCaseTowerWise.DataBind();
    if (GVCaseTowerWise.Rows.Count == 0) {
        ScriptManager.RegisterClientScriptBlock(
            this,
            this.GetType(),
            "alertMessage",
            "alert('No cases for this tower exist in the database')",
            true);
    }
} catch (Exception ex) {
    ScriptManager.RegisterClientScriptBlock(this, this.GetType(),
            "alertMessage", "alert('error while getting data')", true);
}

这是我的存储过程:

ALTER PROCEDURE [dbo].[usp_select_legal1_data]
    @tower nvarchar(50)
AS
BEGIN
    SET NOCOUNT ON;
    SELECT distinct
      [tower_to]
      ,[tower_from]
      ,[sy_no]
    FROM [dbo].[legal1]
    WHERE ((tower_to = @tower) or (tower_from = @tower))
END

ASP.NET(C#) 使用存储过程(SQL 数据库)时捕获异常

更改

SqlDataSource2.SelectParameters.Add("@tower", tw2);

SqlDataSource2.SelectParameters.Add("tower", tw2);

问题是放置 @,因为参数名称是塔。 请参阅下面的 MSDN 文档https://msdn.microsoft.com/en-US/library/F58Z9c1a(v=vs.110).aspx

我找到了问题的答案。问题在于定义存储过程。它仍然将该过程视为文本命令。这是我使用的

SqlDataSource2.SelectCommandType = SqlDataSourceCommandType.StoredProcedure;

现在它正在工作。