簡體   English   中英

如何在“數據表”列中搜索用戶輸入

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM