【问题标题】:Button click to fire stored procedure from SqlDataSource按钮单击以从 SqlDataSource 触发存储过程
【发布时间】:2014-09-02 19:16:21
【问题描述】:

我有一个 sql 存储过程,它接受 3 个参数并充当搜索工具,一切正常。我还有一个带有 3 个相应文本框的 asp 页面、一个网格视图、一个指向存储过程的 sql 源和一个按钮,但我不知道在我的按钮后面放什么代码来让网格视图显示搜索结果。

我尝试了 sqlDataSource1.Select(DataSourceSelectArguments.Empty),因为我相信页面上的 sql 数据源正在处理选择参数,但它并没有拉回任何东西。

【问题讨论】:

标签: sql asp.net sqldatasource


【解决方案1】:

对于点击按钮:

GridView1.DataSourceID = "sqlDataSource1"
GridView1.DataBind();

您的按钮单击将导致回发,并且您的网格将根据您的结果进行更新。

【讨论】:

    【解决方案2】:

    设置 SqlCommand,并将其 CommandType 设置为 StoredProcedure。创建命令对象时使用数据库连接。

    将您的三个参数添加到命令中,设置它们的值,然后执行它。 确保您在 Try/Catch 块中执行此操作并在 finally 块中关闭连接,否则您可能会遇到无法关闭的连接。 (这让我过去参加过的几支球队都被咬了)

    您需要在执行时根据您想要执行的操作选择正确的方法。 (ExecuteNonQuery、ExecuteScalar 或 ExecuteReader)查看文档并找出最适合此功能的内容。

    我个人不喜欢 SqlDataSources 在页面上拖拽。我更喜欢在代码隐藏中工作,因为我觉得它更容易调试和错误处理。

    http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand%28v=vs.110%29.aspx

    示例:

    SqlCommand command = new SqlCommand(
            "myProcedure", connection);
    command.commandType=CommandType.StoredProcedure;
    command.Parameters.Add(new SqlParamater("name",datatype,length));
    cmd.Parameters["name"].Value = "value";
    ...
    try
    {
       connection.Open();
       cmd.ExecuteScalar(); //or whatever method you need
    }
    catch(exception xx)
    {
       //do your error handling here
    }
    finally
    {
      connection.Close(); //Remember to do this here!
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-03
      • 1970-01-01
      相关资源
      最近更新 更多