如何在DataTable列中搜索用户输入
-
13-10-2019 - |
题
目前我正在如下搜索。
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,但确实提供了另一个选项。
不隶属于 StackOverflow