Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Datatable中的Select子句_C#_Excel_Datatable_Datatables - Fatal编程技术网

C# Datatable中的Select子句

C# Datatable中的Select子句,c#,excel,datatable,datatables,C#,Excel,Datatable,Datatables,我试图在数据表中进行一些选择,但我遇到了一些问题,因为我在一些单元格中有如下值:'COX-12-3SCS4CSCH' 此值具有”和- 我尝试执行此选择,但不起作用: string expression = "Nivel='" + lvfin + "' AND [Nivel " + lvfin + "]='" + codActual + "'"; DataRow[] results = DataTable.Select(expression); 例如,lvfin包含0,codActual包含“C

我试图在数据表中进行一些选择,但我遇到了一些问题,因为我在一些单元格中有如下值:'COX-12-3SCS4CSCH'

此值具有-

我尝试执行此选择,但不起作用:

string expression = "Nivel='" + lvfin + "' AND [Nivel " + lvfin + "]='" + codActual + "'";
DataRow[] results = DataTable.Select(expression);
例如,lvfin包含0,codActual包含“COX-12-3SCS4CSCH”

我得到了这个错误:

运算符“COX”后缺少操作数


这里有什么问题?

如果字段名是
Nivel 0
,则需要将该零添加到常量字符串“Nivel”中,并将整个字段名括在方括号中,以形成第一个条件中使用的正确字段名,然后,如果搜索的值包含一个引号,则需要将其加倍。当使用单引号作为字符串值的分隔符或字段名包含空格时,所有这些都是避免混淆解析器所必需的

所以你应该写(为了清晰起见,可以一行一行地写):


目前尚不清楚情况的第二部分。是否有名为[Nivel'COX-12-3SCS4CSCH]的字段?您似乎将字段名与要查找的值混合在一起。例如,我有一个名为Nivel 0的字段名,他的值是“COX-12-3SCS4CSCH”。我不知道如何在c#中执行此操作,但当我在VBA中遇到同样的问题时,我会将单个
'
替换为
'
,这对我来说非常有吸引力。所以像
Replace(codActual,“,”)
这样的东西可能会有帮助。看起来代码将破折号解释为减号。我认为@GetData在操作数周围加双引号而不是单引号的解决方案可能有效。
string fieldName = "Nivel " + lvfin.ToString();
string searchValue = codActual.Replace("'", "''");
string expression = $"[{fieldName}]='{searchValue}'";
DataRow[] results = DataTable.Select(expression);