2011-06-15 19 views
1

好的,所以我在這裏試圖做的是從數據表中選擇所有匹配兩個變量的行。首先,我將SPList查詢成一個數據表。數據表有兩列,客戶端ID和模型詳細信息。以下是一些代碼,希望您能瞭解我正在嘗試的內容。如何使用兩個變量值從數據表中選擇一行?

//These are contained within a foreach loop, so will be different through each 
//iteration through. 
int iClientID = gdbData.GetClientID(iJobNumberID); 
string strModelDetails = xeApprovalUpdate.GetAttribute("ModelDetails"); 
string strClientID = iClientID.ToString() 
//Here my datatable is populated from the sharepoint list I query 
DataTable dtabModelDetails = queryModelDetails(splModelDetails); 
DataRow[] drModelDetails = dtabModelDetails.Select(strClientID, strModelDetails); 

看到,因爲沒有工作,我嘗試做以下select語句:

DataTable dtabModelDetails = queryModelDetails(splModelDetails); 
string strDataExpression = "ClientID = " + strClientID + " AND Title = " + strModelDetails; 
DataRow[] drModelDetails = dtabModelDetails.Select(strDataExpression); 

現在我得到一個語法錯誤SELECT語句,但我敢肯定我的語法是正確的?如果我的select語句沒有返回任何行,我會得到這個錯誤嗎?

回答

1

是的,你可以添加where子句到DataTable Select方法類似這樣的....

DataRow[] drModelDetails = dtabModelDetails.Select("Client ID = '" + clientId + "' AND Model Details = '" + modelDetails + "'"); 
+0

這不是參數化的,就像他要求的一樣,應該不惜一切代價避免。它很容易受到SQL注入攻擊,並且不會對其中包含特殊sql字符的變量進行編碼,如'如果您的變量值中包含撇號,則會發生異常。 – 2011-06-15 20:01:12

+0

是的,我同意 - 但我不會將'SqlParameter'添加到Datatable Select表達式中。你也會得到一個抱怨'cmd'變量的編譯錯誤。 – MNIK 2011-06-15 20:17:47

+0

這給我一個語法錯誤。 – OneFreeFitz 2011-06-16 14:59:55

3

是的,您可以將參數添加到SqlCommand對象。在您的select語句中爲每個參數添加一個參數。

另外,如果列名中有空格,則需要將它們放在括號內。

DataRow[] drModelDetails = dtabModelDetails.Select("[Client ID] = @ClientID AND [Model Details] [email protected]") 

    cmd.Parameters.Add(new SqlParameter("@ClientID", ClientID)); 
    cmd.Parameters.Add(new SqlParameter("@ModelDetails", ModelDetails)); 
+1

這到底是怎麼在cmd?爲什麼要將SqlParameters添加到Datatable Select表達式中? – MNIK 2011-06-15 20:08:01

+0

是的,我也有點困惑。 – OneFreeFitz 2011-06-15 20:24:21

+0

在我看來,你最好的選擇是在Select語句中添加一個表達式,如這裏所示或者在我的例子中(如果我錯了,請糾正我)http://msdn.microsoft.com/en-us/ library/det4aw50.aspx – MNIK 2011-06-15 20:34:56