C#和PostgreSQL谁能给我一个使用从PLSQL返回到c#代码的游标的工作示例?我找到了很多展示如何用返回的数据填充数据集的示例,但我找不到如何将游标与DataReader一起使用,所以我有{未命名的门户}。NpgsqlTransactiontr=(NpgsqlTransaction)Connection.BeginTransaction();NpgsqlCommandcursCmd=newNpgsqlCommand("someStoredProcedure(:inRadius)",(NpgsqlConnection)Connection);cursCmd.Transaction=tr;NpgsqlParameterrf=newNpgsqlParameter("ref".sqlTypes,NpgNpgsqlDbType.Refcursor);rf.Direction=ParameterDirection.InputOutput;cursCmd.Parameters.Add(rf);我必须在这里使用NpgsqlDataReadermyReader来写;正确的。tr.Commit();当我在sql命令后写“fetch”时它起作用,但它不适合。thnx提前供你参考//////从postgresql函数的返回refcursor获取数据//////postgresql的函数名///传递给postgresql函数的参数///outbool参数来检查它是否发生错误///publicListGetRefCursorData(stringFunctionName,ListParameters,outboolErrorOccured){stringconnectstring="";//你的连接字符串在这里ListdtRtn=newList();NpgsqlConnection连接=空;NpgsqlTransaction事务=null;NpgsqlCommand命令=null;尝试{connection=newNpgsqlConnection(connectstring);事务=connection.BeginTransaction();命令=新的NpgsqlCommand();命令。连接=连接;command.CommandType=CommandType.StoredProcedure;command.CommandText=FunctionName;命令.事??务=事务;//if(Parameters!=null){foreach(ObjectiteminParameters){NpgsqlParameterparameter=newNpgsqlParameter();parameter.Direction=参数方向.Inp呃;parameter.Value=item;命令.Parameters.Add(参数);}}//NpgsqlDataReaderdr=command.ExecuteReader();while(dr.Read()){DataTabledt=newDataTable();command=newNpgsqlCommand("FETCHALLIN"+"""+dr[0].ToString()+""",Connection);//使用plpgsqlfetch命令取回数据NpgsqlDataAdapterda=newNpgsqlDataAdapter(command);da.Fill(dt);dtRtn.Add(dt);//所有数据都会保存在List中,无论连接关闭还是返回多个refcursors}ErrorOccured=false;事务.提交();}catch{//错误处理...ErrorOccured=true;如果(交易!=null)交易。回滚();}finally{if(connection!=null)connection.Close();}返回dtRtn;我的问题得到了一些答案问题:我已经存储了返回refCursor的PLSQL过程。我必须使用datareader来获取返回的数据。但是当我添加参数dbreturns以迭代所有返回的数据时,我必须这样编写代码:NpgsqlTransactiontr=(NpgsqlTransaction)Connection.BeginTransaction();NpgsqlCommandcursCmd=newNpgsqlCommand("someStoredProcedure",(NpgsqlConnection)Connection);cursCmd.Transaction=tr;NpgsqlParameterrf=newNpgsqlParameter("ref",NpgsqlTypes.NpgsqlDbType.Refcursor);rf.Direction=ParameterDirection.InputOutput;cursCmd.Parameters.Add(rf);NpgsqlParameterparam2=newNpgsqlParameter("param1"NpgsqlTypes.Int32);rf.Direction=ParameterDirection.Input;cursCmd.Parameters.Add(param2);NpgsqlDataReaderr=cmd.ExecuteReader();while(r.Read()){;//r.GetValue(0);}r.NextResult();while(r.Read()){;}tr.Commit();您应该注意到,您不会像func(:param1)这样在sql中编写参数,如果函数中有参数,则只需将函数名称分配给CommandText属性,然后像往常一样将参数添加到NpgsqlCommand.Parameters集合中。Npgsql将正确绑定您的参数。但现在我有另一个问题。当我将另一个输出参数传递给我的命令文本时。因此我必须在一个字段中为0{我的第一个输出参数},另一个在oracle中我可以直接将RefCursor参数转换为datareader但在postgresql中我不能。感谢您的关注我在同一个事务中使用两个命令解决了Out参数问题从第一个命令我读出参数并执行下一个命令第二个命令看起来像varcmd2=newNpgsqlCommand("FETCHALLFROM"list"",(NpgsqlConnection)Connection)列出了在存储过程中创建的游标名称,因此从db中选择数据首先,这里有一些可能有用的文档:Npgsqldoc该对象还有一个Fill()方法(继承自DbDataAdapter)。此方法可以采用数据集和游标。它将用游标返回的数据填充数据集。您实际上不能为该方法提供DataReader,但您可以提供DataTable,而且我认为您可以设法用它做一些事情。以上就是C#学习教程:C#与PostgreSQL分享的全部内容。如果对你有用,需要进一步了解《C#学习教程》,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
