至少还有一个主题是这个标题的,或者非常接近它,但它不太像我的具体实现,我在其中找不到我的答案。我有这个代码
<code>
List<string> lsRes = new List<string>();
OracleConnection conn = getOracleConnection();
try
{
string sqlQuery = "select CTS.SEQ_BATCH_ID.nextval from dual connect by
level <= " + seqCnt;
conn.Open();
OracleCommand cmd = new OracleCommand(sqlQuery, conn);
cmd.CommandType = CommandType.Text;
OracleDataReader dr;
dr = cmd.ExecuteReader();
while (dr.Read())
lsRes.Add(dr.GetValue(0).ToString());
}
catch(exception e)
{
</code>我正在dr.GetValue(0)上获取我的InvalidOperationException。知道为什么吗?序列应该返回一个或多个数字,我正在将它/它们转换为字符串/字符串,我应该使用GetOracleValue吗?在运行时没有预编译器或编译错误。
发布于 2019-03-14 03:17:27
我不确定代码是哪种语言,但我认为问题可能出在CONNECT BY子句上。我怀疑你可以用它来做你想做的事情。一个序列将在每次执行时返回一个值。如果您只有一个值,则没有什么可连接的。
编辑:哇塞没有意识到序列的CONNECT BY技巧。因此,只要您拥有权限,SQL就应该运行得很好。不确定您使用的是哪种语言的代码,但我不认为这应该被标记为Oracle。
发布于 2019-03-14 05:21:16
我没有用OracleDataReader解决我的问题,但我确实解决了一个问题。
List<string> lsRes = new List<string>();
OracleConnection conn = getOracleConnection();
try
{
DataTable dtValue = new DataTable("ID");
string sqlQuery = "select CTS.SEQ_BATCH_ID.nextval from dual connect by level <=
" + seqCnt;
conn.Open();
OracleCommand cmd = new OracleCommand(sqlQuery, conn);
cmd.CommandType = CommandType.Text;
OracleDataAdapter orada = new OracleDataAdapter(cmd);
orada.Fill(dtValue);
orada.Dispose();
cmd.Dispose();
if (dtValue != null && dtValue.Rows != null && dtValue.Rows.Count > 0 )
foreach (var item in dtValue.Rows)
lsRes.Add(((System.Data.DataRow)item).ItemArray[0].ToString());
}
catch
{https://stackoverflow.com/questions/55149406
复制相似问题