【问题标题】:Running a stored procedure in a SqlDataSource on button click单击按钮时在 SqlDataSource 中运行存储过程
【发布时间】:2012-10-19 02:56:55
【问题描述】:

我正在构建一个 C# ASP.NET 页面,我想在其中调用数据库中的存储过程。

我设置了一个指向存储过程的SqlDataSource。参数直接从Web的控件中获取(TextBox)

我有一个按钮,当用户点击它时它应该运行存储过程,所以我打算添加这样的代码:

mySqlDataSource.run()

mySqlDataSource.exec()

mySqlDataSource.storedProcedure()

当然,这些方法都不存在。

如何初始化存储过程?请问如何获取存储过程返回的值?

谢谢!

【问题讨论】:

  • 试试mySqlDataSource.Select()SqlDataSource.Select Method
  • 你有什么database 产品?您应该使用Provider API 而不是rough SqlDataSource 控件。
  • 您的意思是您没有将它绑定到任何数据绑定控件,例如 GridView 等?
  • @AVD 我正在连接到 MSSQL DB,但我似乎在 Visual Studio 中找不到“提供程序”组件。
  • @AVD 但我使用的是 Microsoft SQL Server 2008 R2

标签: c# asp.net sql-server stored-procedures sqldatasource


【解决方案1】:

我认为您正在寻找的方法是DataBind。使用mySqlDataSource.DataBind()调用它

<asp:SqlDataSource 
  ID="sds2" 
  runat="server" 
  ConnectionString="..."
  SelectCommand="spTest"      
  SelectCommandType="StoredProcedure"
  >
  <SelectParameters>
    <asp:ControlParameter ControlID="TextBox1" PropertyName="Text"
                              Name="ParamName" Type="Int32" DefaultValue="0" />
  </SelectParameters>
</asp:SqlDataSource>
<asp:GridView ID="gv" runat="server" DataSourceID="sds2"></asp:GridView>

调用DataBind 时执行存储过程。如果 GridView 控件的 DataSourceID 属性引用了有效的数据源控件,则会自动调用 DataBind 方法。

【讨论】:

  • spTest 是要执行的存储过程的名称。
  • 但是,如果您想将参数从后面的代码传递到 sqldatasource 而无需在 C# 中重新定义 SQL 命令、连接等,该怎么办?我希望得到一个类似 mySqlDataSource.Select(wsMyParmsHere); 的答案
  • 在您的 SQL 数据源的 Selecting 事件中,您可以有类似 e.Command.Parameters["@LocationID"].Value = localvar; 的内容
【解决方案2】:
//HTML:

<asp:SqlDataSource ID="SqlDataSource1" runat="server" 
        ConnectionString="<%$ ConnectionStrings:testConnectionString %>" 
        onselecting="SqlDataSource1_Selecting" SelectCommand="testProc_sp" 
        SelectCommandType="StoredProcedure"></asp:SqlDataSource>
    <br />
    <asp:Button ID="Button3" runat="server" onclick="Button3_Click" Text="Button" />



//c#:

 protected void Button3_Click(object sender, EventArgs e)
    {
        SqlDataSource1.DataBind();
    }

【讨论】:

    【解决方案3】:

    从 sqldatasource 初始化一个 SP 很简单:

    mySqlDataSource.UpdateCommandType = SqlDataSourceCommandType.StoredProcedure;
    mySqlDataSource.UpdateCommand = "sp_name";
    mySqlDataSource.Update();
    

    要从您的 SP 获取返回值,我建议使用 SqlCommand:

    http://forums.asp.net/t/1177022.aspx

    确保创建的参数 ParameterDirection 设置为 ReturnValue 或 Output

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-18
      • 2012-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多