2014-09-02 66 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! 
}