【发布时间】:2019-07-09 16:52:06
【问题描述】:
我从存储过程接收数据,例如:
var db = new SQLConnMgr();
var dtJobs = db.GetTableBySQL(sp);
一旦我有数据,我将它分成两个数据列并插入到两个不同的数据表中,例如:
DataColumn[] projectsColumns = dtJobs.Columns.Cast<DataColumn>()
.Where(c => c.ColumnName == "Project Name" || c.ColumnName == "ProjectKey")
.Select(c => new DataColumn(c.ColumnName, c.DataType))
.ToArray();
DataColumn[] designGroupColumns = dtJobs.Columns.Cast<DataColumn>()
.Where(c => c.ColumnName == "DesignGroup Name" || c.ColumnName == "DesignGroupId")
.Select(c => new DataColumn(c.ColumnName, c.DataType))
.ToArray();
this.Projects = new DataTable();
this.Projects.Columns.AddRange(projectsColumns);
this.DesignGroups = new DataTable();
this.DesignGroups.Columns.AddRange(designGroupColumns);
foreach (DataRow row in dtJobs.Rows)
{
DataRow aRow = Projects.Rows.Add();
DataRow bRow = DesignGroups.Rows.Add();
foreach (DataColumn project in projectsColumns)
aRow.SetField(project, row[project.ColumnName]);
foreach (DataColumn designGroup in designGroupColumns)
bRow.SetField(designGroup, row[designGroup.ColumnName]);
}
所以现在我有两个具有不同数据和列的数据表。现在我想在文本框更改事件中过滤项目Datatable。所以我这样做:
private void txtSearchJobName_TextChanged(object sender, EventArgs e)
{
DataView dvJobs = this.Projects.DefaultView;
dvJobs.RowFilter = "Project Name LIKE '%" + txtSearchJobName.Text + "%'";
}
但是当我输入文本框时,它会返回语法错误异常
System.Data.SyntaxErrorException: '语法错误: 后面缺少操作数 '名称'运算符。'
当我尝试执行dvJobs.RowFilter 时会发生这种情况,我调试dvJobs DataView 并且它有我的项目名称列,我不知道我是否在语法上做错了什么。问候
【问题讨论】:
-
更改为 [Project Name] LIKE .... 解析器被包含空格的列名弄糊涂了,所以你需要将你的名字括在方括号中跨度>