如何在 VB.NET 中将 '<unnamed portal 1>' 转换为 plpgsql 函数的数据集

Posted

技术标签:

【中文标题】如何在 VB.NET 中将 \'<unnamed portal 1>\' 转换为 plpgsql 函数的数据集【英文标题】:How convert '<unnamed portal 1>' to dataset of a plpgsql function in VB.NET如何在 VB.NET 中将 '<unnamed portal 1>' 转换为 plpgsql 函数的数据集 【发布时间】:2015-08-26 07:37:49 【问题描述】:

我正在学习一些 PostgreSQL 基础知识。当我试图将 PostgreSQL 存储函数的恢复集返回到 VB.NET 应用程序时,我遇到了以下情况

##--- 我的 PostgreSQL 函数是
CREATE OR REPLACE FUNCTION checkLogin(
IN p_uname TEXT,IN p_pwd TEXT) RETURNS refCursor AS
$BODY$
    DECLARE ref refCursor;
    BEGIN
        OPEN ref FOR SELECT UserMaster.* FROM UserMaster WHERE username=p_uname AND userpwd=p_pwd AND coalesce(userdel,FALSE)=FALSE;
        RETUR ref;
    END;
$BODY$
LANGUAGE PLPGSQL
-- 我的 VB 函数返回数据集如下
Function CheckLogin(ByVal username As String,ByVal pwd As String) As DataSet
    Try

        Dim ds As New DataSet

        Dim conString As String="Server=localhost;port=5432;Database=myDB;UserId=postgres;password=postgres"
        Dim con As NpgsqlConnection=New NpgsqlConnection(ConString) 
        con.open()
        Dim com As NpgsqlCommand=New NpgsqlCommand("select * from checkLogin('"+ username +"','"+ pwd +"')",con)
        Dim da As NpgsqlDataAdapter=New NpgsqlDataAdapter(com)
        da.Fill(ds)
        Return ds
    Catch ex As Exception
        Return Nothing
    End Try
End Function

从这个函数中,它只在标签内返回“未命名的门户 1” 我的问题是如何将其转换为 DataSet。如果有人回答并提到我做错了什么,它真的很有帮助。我用谷歌搜索并阅读了与此相关的大部分文章。但我没有找到合适的解决方案。如果有链接,请向我提及并原谅我这个问题。

提前致谢

【问题讨论】:

【参考方案1】:

如果你想要的是一个返回一组行的函数(很像一个表),那么你的函数可能应该返回一个表(参见the docs 或this question 的例子)而不是一个引用。

refcursor 是一个服务器端对象,它允许您以特殊方式检索查询结果(例如,一次获取一定数量的行,重置它)。如果您的函数返回一个 refcursor,您将需要通过发送更多查询与它进行交互,如in the docs 所述。您的用例似乎不需要这种复杂性。

【讨论】:

谢谢你提到的链接对我有很大帮助。谢谢【参考方案2】:

我改变了我的存储功能,如下所示

CREATE OR REPLACE FUNCTION checkLogin(
IN p_uname TEXT,IN p_pwd TEXT) RETURNS TABLE(uid INTEGER,uname CHARACTOR varying,utype integer) AS
$BODY$

    BEGIN 
        RETURN QUERY
        SELECT userId,userName,userType FROM UserMaster WHERE username=p_uname AND userpwd=p_pwd AND coalesce(userdel,FALSE)=FALSE;

    END;
$BODY$
LANGUAGE PLPGSQL

这个 pgSQL 函数可以正常工作并返回结果集,并且可以轻松地将其转换为数据集。

【讨论】:

以上是关于如何在 VB.NET 中将 '<unnamed portal 1>' 转换为 plpgsql 函数的数据集的主要内容,如果未能解决你的问题,请参考以下文章

如何在 vb.net 中将 datagridview 单元格样式从默认文本框更改为组合框?

如何在 VB.NET 中将可为空的 DateTime 设置为空?

如何在 VB NET 中将方法名称作为过程的参数传递

在 VB.net 中将多种文件类型保存到一个 potobuf-net 化的文件中

在 VB.NET 中将 UTF-8 转换为 windows-1255 编码

在 vb.net 中将“字符串”转换为“SQlCommand”