.net - Npgsql 找不到带有 XML 参数的函数,而是寻找 TEXT

标签 .net postgresql npgsql

我有一个名为 test_xml_func 的 Postgres SQL 函数,它接受一个 XML 类型的参数。当使用 Npgsql 在 .NET 中调用此函数时,我收到一条错误消息,指出 text_xml_func(text) 不存在。有没有办法让它在不必将 NpgsqlParameter 的 NpgsqlDbType 属性设置为 XML 的情况下查找 XML 函数?

我正在使用 Npgsql v3.0.3 和 Postgres 9.5 Beta 1。

Postgres 函数:

CREATE OR REPLACE FUNCTION test_xml_func(_xml XML)
RETURNS BOOLEAN AS 
$$
    SELECT TRUE;
$$ LANGUAGE SQL;

.NET 调用

Using connection As New NpgsqlConnection(ConnectionString)
    Using cmd As New NpgsqlCommand("test_xml_func", connection) With {.CommandType = CommandType.StoredProcedure}
        cmd.Parameters.Add(New NpgsqlParameter("_xml", "<ITEMS><ITEM><VALUE>1</VALUE></ITEM></ITEMS>"))
        connection.Open()
        System.Console.WriteLine(cmd.ExecuteScalar())
    End Using
End Using

最佳答案

不,您必须将 NpgsqlParameter 的 NpgsqlDbType 设置为 XML。您有什么特别的原因想要避免这种情况吗?

当 NpgsqlDbType 和 DbType 未在 NpgsqlParameter 上设置时,Npgsql 默认为类型推断 PostgreSQL 类型。在字符串值的情况下,这是一个 PostgreSQL 文本,这就是为什么您会收到未定义 text_xml_func(text) 的错误。

关于.net - Npgsql 找不到带有 XML 参数的函数,而是寻找 TEXT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33906191/

相关文章:

.net - 使用 System.Drawing,如何绘制模仿黄色突出显示标记效果的东西?

c# - 使用 Npgsql 和 SSL 证书身份验证时出现 SSL 错误

C#-Postgres : I can't open connections when app is running on a shared drive

c# - 如何学习 MVC——*不*在网络环境中

c# - 在匿名方法中使用 MethodInfo.GetCurrentMethod()

postgresql - 如何使用 Sequelize 将 id 传递给其关联记录

sql - 以 15 分钟的间隔生成系列,但每隔一周跳过一次

servicestack - 将最新版本的 Npgsql 与 ServiceStack.OrmLite.PostgreSQL 结合使用

c# - RegLoadAppKey 在 32 位操作系统上运行良好,在 64 位操作系统上失败,即使两个进程都是 32 位的

node.js - Heroku 部署错误上的 Webpack Node.js