使用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中运行它,而不会出现任何问题。
谢谢
将该字段包含在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是您的一个选择。