时间:2021-07-01 10:21:17 帮助过:75人阅读
PWMIS.DataProvider.Data.AdoHelper db = MyDB.GetDBHelperByConnectionName("PostgreSQL");
运行该存储过程,出现下面的错误: DataBase ErrorMessage:ERROR: 42883: function updatefundattention(text) does not exist
CREATE OR REPLACE FUNCTION updatefundattention(jjdm citext)
昨天分析可能PostgreSQL的字符型参数不能使用AnsiString参数类型,需要使用String类型,但今天测试发现 para.DbType = DbType.String ; 问题依然没有解决。 重新建立一个测试函数updatefundattention,只是参数类型为 varchar:
CREATE OR REPLACE FUNCTION updatefundattention2(jjdm character varying)
运行测试程序,不论 para.DbType = DbType.AnsiString ; 还是 para.DbType = DbType.String ; 调用函数updatefundattention2 均能通过,故此得到结论: 目前自定义的 citext 类型.NET程序无法设置正确的DbType,从而会出现找不到函数的错误! 问题影响: 在WFT中,所有使用.NET程序调用PostgreSQL存储过程的代码,如果存储过程的参数使用了自定义的类型(例如citex),均会受影响。 解决方案: a,建议不要在PostgreSQL函数的参数中使用自定义的类型,如果要想对参数进行大小写转换,建议在函数体中使用另外一个Pgsql变量,函数中执行查询的SQL语句使用这个新变量,而不是直接使用这个函数参数; b,修改Sql-Map中的SQL语句,例如
<Select CommandName="AddGuanZhuDu" Method="" CommandType="StoredProcedure" Description="增加关注度" ResultClass="ValueType"><![CDATA[
但这种修改方式会造成SqlServer与PostgreSQL的SQL-MAP语句不相同,增加程序的维护量,理想的方式是SQL-MAP语句尽量相同。
调用PostgreSQL存储过程,找不到函数名的问题
标签:int title color erb bsp 使用 ret images from