C# 获取PL/SQL中的单行
我正在尝试在Oracle SQL Developer客户机中创建一个新过程。此过程将根据一个条件获取一行 我的程序代码如下:-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
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,它映射到ODBCResultSet
。一项纪录仍然是一套。您可能不想继续构建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());
}
}
}
}