[英]How to search User Input within DataTable Column
目前,我正在搜索如下。
DataRow []行= dataTable.Select(“ FieldName ='” + userInput +“'”);
這里的問題是,只要用戶提供帶有單引號(')
的輸入,就會引發錯誤。
我可以很容易地糾正它
DataRow []行= dataTable.Select(“ FieldName ='” + userInput.Replace(“'”,“”“)+”'“);
我擔心其他用戶輸入可能會導致問題嗎?
@Ismail:如果我們在前端查詢或后端查詢中使用用戶輸入之前對其進行驗證,這將是一個好習慣。
所以我認為在您的情況下,您必須具有以下功能:
if(ValidateInput(userInput))
{
DataRow[] rows = dataTable.Select("FieldName='"+ userInput + "'");
}
在驗證中,您可以進行任何檢查。 現在您只想檢查',但是將來,您可能需要檢查其他事情。
根據您的需要,您可以選擇驗證函數的返回類型,如果您想修改輸入數據,請修改並返回,否則返回布爾值。
如果要使用DataTable.Select(filter)進行數據過濾,則必須格式化/忽略或替換filter語句中的特殊字符,為此,您將不得不編寫更多代碼。 如果您不想因特殊字符而驚慌,可以使用LINQ
DataTable dataTable = new DataTable();
DataColumn dc = new DataColumn("FieldName");
dataTable.Columns.Add(dc);
DataRow dr = dataTable.NewRow();
dr[0] = "D'sulja";
dataTable.Rows.Add(dr);
string input = "D'sulja";
var result = from item in dataTable.AsEnumerable()
where item.Field<string>("FieldName") == input select item;
在這種情況下,我認為單引號是您唯一需要擔心的字符,因為單引號用於分隔字符串值。 有關表達式語法的更多信息,請參見DataColumn.Expression的MSDN條目(創建過濾器表達式使用與DataColumn.Expression屬性相同的規則)。
您無需指明正在使用哪個C#版本,但是使用LINQ,您可以執行以下操作:
var rows = table.AsEnumerable()
.Where(r => r.Field<string>("Name") == "O'Hare")
.Select(r => r)
.ToArray();
一個折衷方案是,如果DataTable中有任何已刪除的行,則還需要檢查RowState,但這確實提供了另一種選擇。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.