目前我正在如下搜索。

datarow [] rows = dataTable.Select(“ fieldName ='” + userInput +“'”);

这里的问题是,每当用户提供单个报价的输入 ('), ,它会引发错误。

我可以通过

datarow [] rows = dataTable.Select(“ fieldName ='” + userInput.replace(“'“”,“''''”) +“'”);

我担心其他用户输入可能会引起问题?

有帮助吗?

解决方案

这里 是光荣的确切答案 乔恩·斯凯特先生.

其他提示

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

因此,我认为在您的情况下,您必须具有像...

if(ValidateInput(userInput))
{
  DataRow[] rows = dataTable.Select("FieldName='"+ userInput + "'");
}

在验证中,您可以进行任何检查。现在,您只想检查'',但将来,您可能必须检查其他事情。

并且根据您的需求,您可以返回验证函数的返回类型,如果要修改输入数据,然后修改并返回否则返回BOOL。

如果要使用datatable.select(过滤)进行数据过滤器,则必须从过滤器语句中格式化/忽略或替换特殊字符,为此,您必须编写更多代码。如果您不想为特殊角色感到恐慌,那么您可以使用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 (创建过滤器表达式使用与DataColumn.expression属性相同的规则)。

您没有指出您正在使用的C#的版本,但是使用LINQ,您可以执行此操作:

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

一个权衡是,如果您在数据表中有任何删除行,但您还需要检查Rowstate,但确实提供了另一个选项。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top