至少还有一个与此标题相关的线程,或者与之非常接近的线程,但这与我的特定实现不太相似,我无法在其中找到答案。 我有这个代码
<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吗?仅在运行时没有预编译器或编译错误。
答案 0 :(得分:0)
我不确定代码是哪种语言,但是我认为问题可能出在CONNECT BY子句上。我怀疑您是否可以使用该命令按顺序执行您想要的操作。一个序列每次执行将返回一个值。如果只有一个值,则没有任何可连接的。
编辑:Whoops并不知道序列的CONNECT BY技巧。因此,只要您具有权限,SQL就应该可以正常运行。不知道您使用的是哪种语言,但是我不认为这应该被标记为Oracle。
答案 1 :(得分:0)
我没有使用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
{