【问题标题】: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!
}