使用REPLACE的标准表达式中的数据类型不匹配,并且没有要替换的内容

本文关键字:替换 标准 REPLACE 表达式 不匹配 数据类型 使用 | 更新日期: 2023-09-27 18:16:43

编辑:我已经通过切换到ACE而不是ODBC解决了我的问题。这可能是ODBC的一些错误?无论如何,如果您可以选择使用ACE,这似乎是一个解决方案。把它放在这里,因为stackoverflow不允许我在问完问题后马上回答我自己的问题

我的适配器抛出一个"数据类型不匹配的标准表达式"异常,当试图用查询填充一个DataTable:

"SELECT updateTime AS [Time], updateType AS [Type], updateOperator AS [Operator], REPLACE(updateText, '''n', '''r''n') AS [Update] FROM [updt] WHERE updID = '" + updID + "'"

REPLACE函数用于使换行符使用Windows样式,以便它们在DataGridViews和其他winforms控件中正确显示。

数据库为Access 2010我通过ODBC连接(不是Jet)updID的数据类型是正确的,是'Text'.

当试图抓取'updateText'没有'n字符要替换的行时,会出现问题。对于任何包含''n'的行,它将正常运行。

然而,当程序从异常中中断时,我可以打开命令对象并获取命令文本并在Access中运行它,而不会出现任何问题。

谢谢

使用REPLACE的标准表达式中的数据类型不匹配,并且没有要替换的内容

将该字段包含在iif()函数中。基本上,如果它不是空的,然后做替换。否则保持为空。

您可能需要一个IIF函数,因为Replace函数不能处理Null。

"SELECT updateTime AS [Time], updateType AS [Type], updateOperator AS [Operator], " & _
"REPLACE(IsNull(updateText, "", updateText), '''n', '''r''n') AS [Update] " & _
"FROM [updt] WHERE updID = '" + updID + "'"

为什么不先替换文本,然后再包含在查询中呢?

string strValue;
if(updateText.Contains("'r"))
    strValue=updateText.Replace("'n","'r'n");
else
    strValue==updateText;
"SELECT updateTime AS [Time], updateType AS [Type], updateOperator AS [Operator],"+ 
strValue "+ AS [Update] FROM [updt] WHERE updID = '" + updID + "'"

希望能有所帮助。

我已经通过切换到ACE而不是ODBC解决了我的问题。这可能是ODBC的一些错误?在任何情况下,这似乎是解决方案,使用ACE是您的一个选择。