2014-09-02 67 views
1

我有一个SQL存储过程,它接受3个参数,并充当一个搜索工具,它的所有工作正常,因为它应该。我也有一个带有3个相应文本框,一个网格视图,一个指向存储过程和一个按钮的sql源的asp页面,但我坚持要在我的按钮后面放置什么代码以使网格视图显示搜索结果。按钮点击以触发存储过程从SqlDataSource

我试过sqlDataSource1.Select(DataSourceSelectArguments.Empty),因为我相信select参数正在被页面上的sql数据源处理,但它不会拉回任何东西。

+0

也许你应该告诉我们一些代码? – 2014-09-02 19:38:12

+0

我编辑了你的标题。请参阅:“[应该在其标题中包含”标签“](http://meta.stackexchange.com/questions/19190/)”,其中的共识是“不,他们不应该”。 – 2014-09-02 19:38:30

回答

2

对于按钮的点击:

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

你按一下按钮会引起回传和网格将与您的结果进行更新。

+1

不要忘记'GridView1.DataBind();' - 否则你的数据源将不会被绑定... – Darren 2014-09-02 19:31:51

+0

哎呀!编辑完成,谢谢。 – CrazyPaste 2014-09-02 19:35:26

0

设置一个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! 
}