Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 获取PL/SQL中的单行_C#_Oracle - Fatal编程技术网

C# 获取PL/SQL中的单行

C# 获取PL/SQL中的单行,c#,oracle,C#,Oracle,我正在尝试在Oracle SQL Developer客户机中创建一个新过程。此过程将根据一个条件获取一行 我的程序代码如下:- create or replace PROCEDURE GETUSERKEYS ( USERNAME IN NVARCHAR2 , STATUS OUT NUMBER , TEMPTB OUT ClientKey%rowtype ) AS BEGIN SELECT * INTO TEMPTB FROM ClientKey WHERE Client

我正在尝试在Oracle SQL Developer客户机中创建一个新过程。此过程将根据一个条件获取一行

我的程序代码如下:-

create or replace PROCEDURE GETUSERKEYS 
(
  USERNAME IN NVARCHAR2 
, STATUS OUT NUMBER 
, TEMPTB OUT ClientKey%rowtype
) AS 
BEGIN
      SELECT * INTO TEMPTB FROM ClientKey WHERE ClientKey.USERNAME=USERNAME;
      STATUS:=1;
END GETUSERKEYS;
这是我的C#代码:

我无法找到一种基于条件从表中返回行的方法。 我是甲骨文的新手

问题是,因此您需要使用变通方法

最简单的解决方案是使用SYS_REFCURSOR,它映射到ODBC
ResultSet
。一项纪录仍然是一套。您可能不想继续构建Oracle用户定义类型


这为在ODP.Net中使用SYS_REFCURSOR提供了一个起点

问题是C#不支持
%ROWTYPE
,因此您所能做的就是解决问题@APC我需要做什么改变?我没有获得“了解更多”链接信息。请澄清,是Oracle的C#客户端不支持
%rowtype
。无论如何,最简单的解决方案是使用SYS_REFCURSOR,它映射到
ResultSet
。一项纪录仍然是一套。您可能不想继续构建Oracle用户定义类型。@APC成功了,谢谢!!请张贴你的答案。
using (OracleConnection connection = new OracleConnection(ConnectionString))
                {
                    using (OracleCommand cmd = new OracleCommand("GetUserKeys", connection))
                    {
                        cmd.CommandType = CommandType.StoredProcedure;

                        OracleParameter username = new OracleParameter();
                        username.OracleDbType = OracleDbType.NVarchar2;
                        username.ParameterName = "Username";
                        username.Direction = ParameterDirection.Input;
                        username.Value = Username;
                        cmd.Parameters.Add(username);

                        OracleParameter status = new OracleParameter();
                        status.OracleDbType = OracleDbType.Int32;
                        status.ParameterName = "Status";
                        status.Direction = ParameterDirection.Output;
                        cmd.Parameters.Add(status);

                        if (connection.State == ConnectionState.Open)
                            connection.Close();
                        connection.Open();
                        cmd.ExecuteNonQuery();
                        DataSet dataset = new DataSet();
                        OracleDataAdapter da = new OracleDataAdapter(cmd);
                        da.Fill(dataset);
                        _id = (int)cmd.Parameters["Status"].Value;
                        if (_id > 0)
                        {
                            if (dataset.Tables[0] != null && dataset.Tables[0].Rows.Count != 0)
                            {
                                _key = new ClientKey();
                                _key.ClientId = dataset.Tables[0].Rows[0]["ClientId"].ToString();
                                _key.ClientSecret = dataset.Tables[0].Rows[0]["ClientSecret"].ToString();
                                _key.ClientKeyId = int.Parse(dataset.Tables[0].Rows[0]["ClientKeyID"].ToString());
                                _key.Username = dataset.Tables[0].Rows[0]["Username"].ToString();
                                _key.CreateOn = Convert.ToDateTime(dataset.Tables[0].Rows[0]["CreateOn"].ToString());
                            }
                        }
                    }
                }