将数据集从 Oracle 传递到 C# 时出现指令指针错误
Passing a dataset from Oracle to C# gives me an instruction pointer error
我有以下 C# 代码块,用于将变量传递到 Oracle 12c 过程和 return 数据集:
public void Show_Data()
{
try
{
OracleConnection conn = GetConnection();
{
conn.ConnectionString = ConfigurationManager.ConnectionStrings["ConnCST"].ToString();
OracleCommand cmd3 = new OracleCommand();
cmd3.CommandType = CommandType.StoredProcedure;
cmd3.CommandText = "CST_FEEDBACK";
cmd3.Connection = conn;
cmd3.Parameters.Add("LineID", OracleType.Number).Value = hLineID.Value;
cmd3.Parameters.Add("Emp_out", OracleType.Cursor).Direction = ParameterDirection.Output;
//connection2.Open();
var SearchAdapter = new OracleDataAdapter(cmd3);
var ds = new DataSet();
SearchAdapter.Fill(ds);
ResponseRepeater.DataSource = ds;
ResponseRepeater.DataBind();
}
}
catch (Exception ex)
{
Response.Write(ex.Message);
}
}
当代码到达行 var ds = new Dataset();
时,它失败并显示以下消息:
Cannot obtain value of the local variable or argument because it is
not available at this instruction pointer, possibly because it has
been optimized away.
谁能告诉我这是什么意思and/or如何解决这个问题?
调试经过编译器优化的代码时经常出现此问题。
切换到生成配置 "Debug",或者如果它已经处于活动状态,则转到项目 -> 属性 -> 选项卡 [生成],查找 [x] 优化代码,然后取消选中它:
请尝试 Oracle 托管数据访问 dll(https://www.nuget.org/packages/Oracle.ManagedDataAccess/) for oracle connection. And use any oracle helper class(http://read.pudn.com/downloads153/sourcecode/windows/dotnet/671399/SQL%2BOleDb%2BOracle%2BNpg_helper/SqlHelper/OracleHelper.cs__.htm)。现在您可以正常使用 SQL 查询。
OracleConnectionService OraCon = new OracleConnectionService();
var cc = ConfigurationManager.ConnectionStrings["OracleProdContext"].ToString();
OracleConnection _con = new OracleConnection(cc);
OracleConnection = _con;
TextCommandType = System.Data.CommandType.Text;
var resultSet = OracleHelper.ExecuteScalar(OraCon.OracleConnection, OraCon.TextCommandType, OracleQuery);
var result = resultSet.Tables[0];
如果您想更改为 Collection,请使用一些通用的将 DataRow 转换为 Collection 的代码,这些代码在 Net 上可用。
我有以下 C# 代码块,用于将变量传递到 Oracle 12c 过程和 return 数据集:
public void Show_Data()
{
try
{
OracleConnection conn = GetConnection();
{
conn.ConnectionString = ConfigurationManager.ConnectionStrings["ConnCST"].ToString();
OracleCommand cmd3 = new OracleCommand();
cmd3.CommandType = CommandType.StoredProcedure;
cmd3.CommandText = "CST_FEEDBACK";
cmd3.Connection = conn;
cmd3.Parameters.Add("LineID", OracleType.Number).Value = hLineID.Value;
cmd3.Parameters.Add("Emp_out", OracleType.Cursor).Direction = ParameterDirection.Output;
//connection2.Open();
var SearchAdapter = new OracleDataAdapter(cmd3);
var ds = new DataSet();
SearchAdapter.Fill(ds);
ResponseRepeater.DataSource = ds;
ResponseRepeater.DataBind();
}
}
catch (Exception ex)
{
Response.Write(ex.Message);
}
}
当代码到达行 var ds = new Dataset();
时,它失败并显示以下消息:
Cannot obtain value of the local variable or argument because it is not available at this instruction pointer, possibly because it has been optimized away.
谁能告诉我这是什么意思and/or如何解决这个问题?
调试经过编译器优化的代码时经常出现此问题。
切换到生成配置 "Debug",或者如果它已经处于活动状态,则转到项目 -> 属性 -> 选项卡 [生成],查找 [x] 优化代码,然后取消选中它:
请尝试 Oracle 托管数据访问 dll(https://www.nuget.org/packages/Oracle.ManagedDataAccess/) for oracle connection. And use any oracle helper class(http://read.pudn.com/downloads153/sourcecode/windows/dotnet/671399/SQL%2BOleDb%2BOracle%2BNpg_helper/SqlHelper/OracleHelper.cs__.htm)。现在您可以正常使用 SQL 查询。
OracleConnectionService OraCon = new OracleConnectionService();
var cc = ConfigurationManager.ConnectionStrings["OracleProdContext"].ToString();
OracleConnection _con = new OracleConnection(cc);
OracleConnection = _con;
TextCommandType = System.Data.CommandType.Text;
var resultSet = OracleHelper.ExecuteScalar(OraCon.OracleConnection, OraCon.TextCommandType, OracleQuery);
var result = resultSet.Tables[0];
如果您想更改为 Collection,请使用一些通用的将 DataRow 转换为 Collection 的代码,这些代码在 Net 上可用。