C# 如何在DataTable列中搜索用户输入

C# 如何在DataTable列中搜索用户输入,c#,sql,datatable,sql-injection,datatable.select,C#,Sql,Datatable,Sql Injection,Datatable.select,目前我正在搜索如下 DataRow[]行= dataTable.SelectFieldName='0+ 用户输入+' 这里的问题是,每当用户提供带有单引号的输入时,它就会抛出错误 我可以很容易地纠正它 DataRow[]行= dataTable.SelectFieldName='0+ 替换“,+” 我担心还有哪些用户输入可能会导致问题?@Ismail:如果我们在前端查询或后端查询中使用用户输入之前验证用户输入,这将是一个好习惯 所以我认为在你的场景中,你必须有这样的功能 if(ValidateI

目前我正在搜索如下

DataRow[]行= dataTable.SelectFieldName='0+ 用户输入+'

这里的问题是,每当用户提供带有单引号的输入时,它就会抛出错误

我可以很容易地纠正它

DataRow[]行= dataTable.SelectFieldName='0+ 替换“,+”


我担心还有哪些用户输入可能会导致问题?

@Ismail:如果我们在前端查询或后端查询中使用用户输入之前验证用户输入,这将是一个好习惯

所以我认为在你的场景中,你必须有这样的功能

if(ValidateInput(userInput))
{
  DataRow[] rows = dataTable.Select("FieldName='"+ userInput + "'");
}
在验证中,您可以进行任何检查。现在你只想检查‘但将来,你可能不得不检查其他东西’

根据您的需要,您可以选择validate函数的返回类型,如果您想修改输入数据,请修改并返回,否则只返回bool

如果您想使用DataTable.Selectfilter for data 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;

在本例中,我认为单引号是唯一需要担心的字符,因为它用于分隔字符串值。有关表达式语法的详细信息,请参阅用于创建筛选器表达式的MSDN条目使用与DataColumn.expression属性相同的规则

您不会指明正在使用哪个版本的C,但使用LINQ,您可以执行以下操作:

var rows = table.AsEnumerable()
                .Where(r => r.Field<string>("Name") == "O'Hare")
                .Select(r => r)
                .ToArray();

一个折衷办法是,如果数据表中有任何已删除的行,您还需要检查行状态,但它确实提供了另一个选项。

正是尊敬的回答

你所做的是正确的。。。你不必担心输入。我不同意上面的评论,你必须经常清理你的输入。编写一个自定义正则表达式来替换错误的输入,或者使用一个库函数,其中有许多可用的函数。始终清理用户输入。如果我必须将userInput与一个包含单引号的值相匹配,该怎么办。例如,我的字段有一个值D'Souza,用户是否试图与之匹配?或者它可能有一个带%Or的值?