1

我的 InfoPath 表单中有一个下拉列表,我正在根据下拉列表的选择加载一些其他字段。这样我就为下拉列表的“更改”事件编写了如下代码。

public void ProjectName_Changed(object sender, XmlEventArgs e)
{
            string projectId = e.NewValue;
            dataQueryConnection = (AdoQueryConnection)this.DataConnections["ProjectInformation"];
            dataQueryConnection.Command = dataQueryConnection.Command + string.Format(" WHERE ProjectId = '{0}'",             projectId);
            dataQueryConnection.Execute();

}

当我第一次更改下拉列表中的项目时,它的工作正常,但是对于项目的后续更改(第二次等),它会给出以下错误,

无法为以下 DataObject 运行查询: ProjectInformation InfoPath 无法运行指定的查询。[0x80040E14][Microsoft OLE DB Provider for SQL Server] 关键字“WHERE”附近的语法不正确。

这就是第二次的原因,

dataQueryConnection.Command = 从“TRF”中选择“EmployeeID”、“Accountname”、“ProjectName”、“ProjectId”、“ProjectRole”、“BillableUtilization”、“ClientName”、“BillingCode”、“BUHead”。“hrt_vw_ProjectInformation”为“ hrt_vw_ProjectInformation" WHERE ProjectId = '3072507' WHERE ProjectId = '3076478'

每次与先前执行的查询一起触发 WHERE 子句的后续事件。

我怎样才能摆脱这个问题?

4

1 回答 1

0

将初始命令字符串存储在代码中的全局变量中(在加载事件中)。然后在您的 Changed 函数中追加到全局变量而不是命令的先前值。

string OrigString

public void FormEvents_Loading(object sender, LoadingEventArgs e)
{
   OrigString = dataQueryConnection.Command;
}

public void ProjectName_Changed(object sender, XmlEventArgs e) 
{ 
            string projectId = e.NewValue; 
            dataQueryConnection = (AdoQueryConnection)this.DataConnections["ProjectInformation"]; 
            dataQueryConnection.Command = OrigString + string.Format(" WHERE ProjectId = '{0}'",             projectId); 
            dataQueryConnection.Execute(); 

} 
于 2010-07-01T13:15:31.783 回答