2016-03-21 24 views
1

我有一個使用SqlDataSource對象從數據庫檢索數據的方法後面的代碼,然後用作我的網格視圖的數據源來顯示記錄。我需要有條件地向我的SelectCommand查詢的WHERE子句添加另一個條件,並且需要通過參數將數據傳遞給查詢。我該怎麼做呢?如何在後臺代碼中使用SqlDataSource.SelectCommand中的參數化查詢?

SqlDataSource sds = new SqlDataSource(); 

sds.SelectCommand = "Select CustomerName, LoanNumber, LoanDate FROM Loan WHERE IsActive = 1 "; 

if (filterRecord != "All") { // DDL filter on page, all records by default 
    sds.SelectCommand += "AND LoanType = ??"; //this is where I need to parameterize my query 
} 

我覺得像

if (filterRecord != "All") { 
    sds.SelectCommand += "AND LoanType = @LoanType"; 
    sds.SelectParameters.Add("@LoanType", "Mortgage"); 
} 

但這似乎沒有工作。

+0

'但這似乎並不奏效。什麼是行不通的?是否有例外? – LarsTech

+0

它說:「必須聲明標量變量」@LoanType「 – wizloc

+0

你使用LoanType = ??'或LoanType = @ LoanType? – LarsTech

回答

1

我會建議切換到SqlCommand對象定義查詢和用SqlDataReader對象讀取記錄。您可以使用類似的參數到您的查詢中添加以下內容:

SqlCommand cmd = new SqlCommand(queryString, connection); 
cmd.Parameters.AddWithValue("@paramName", value); 

之後,您可以SqlDataReader中,以網格視圖綁定像往常一樣,宣稱它作爲數據源。

+0

謝謝。我永遠不知道如何將參數添加到SqlDataSource中 – wizloc

0

我不認爲你正在使用的數據源對象:

一個ASP參數添加到SQL數據源:

<asp:Parameter Name="LoanType" Type="String" DefaultValue="default" /> 

改變選擇命令:

"Select CustomerName, LoanNumber, LoanDate FROM Loan WHERE IsActive = 1 AND (@LoanType="default" or LoanType [email protected])" 

然後在你的代碼後面這樣做:

if (filterRecord != "All") { 
    sds.SelectParameters("LoanType").DefaultValue="Mortgage" 
} 

描述: 您需要在後面的代碼中編輯之前在ASP webform中定義sql參數。我用一個虛擬值「default」定義了一個參數。因此,如果在參數後面不改變參數@LoanType等於「default」字符串,並且@ LoanType =「default」將對所有行返回true,並且它不會考慮LoanType = @ LoanType。 但是,如果您在@ LoanType =「default」後面的代碼中更改參數,則返回false,它將檢查每行的LoanType = @ LoanType,這將導致您想要的結果!

我以前的答案: 這是好事,當你不使用SQL數據源和您使用的是SQL命令

if (filterRecord != "All") { 
    SqlParameter Parameter = new SqlParameter(); 
    Parameter.ParameterName = "@LoanType"; 
    Parameter.SourceColumn = "LoanType"; 
    Parameter.SqlDbType = SqlDbType.NVarChar; 
    Parameter.Value = "Mortgage"; 

    sds.SelectCommand += "AND LoanType = @LoanType"; 
    sds.SelectParameters.Add(Parameter); 
} 
+0

我在後面的代碼中使用了SQLDataSource,而不是在aspx頁面上,這裏有什麼建議? – wizloc

+0

好的,我改變了答案,檢查了新的 – Amir

相關問題