Npgsql没有使用XML参数查找函数,而是查找TEXT

时间:2015-11-24 23:59:44

标签: .net postgresql npgsql

我有一个名为test_xml_func的Postgres SQL函数,它接受XML类型的参数。使用Npgsql在.NET中调用此函数时,我收到错误消息,指出text_xml_func(text)不存在。有没有办法让这个查找XML函数而不必将NpgsqlParameter的NpgsqlDbType属性设置为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

1 个答案:

答案 0 :(得分:1)

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

当NpgsqlDbType和DbType未在NpgsqlParameter上设置时,Npgsql默认为类型推断PostgreSQL类型。对于字符串值,这是一个PostgreSQL文本,这就是为什么你得到一个错误,即text_xml_func(text)没有定义。