繁体   English   中英

OracleDataReader HasRows引发无效数字异常

[英]OracleDataReader HasRows throws Invalid Number Exception

我有以下代码:

int count = 0;
OracleDataReader dr;
parameters = new Dictionary<string, string>();
parameters.Add("Username", UserName);

query = "Select KEY from TABLE1 where USERID=:Username AND KEY IN(";

foreach (string Location in Locations)
{
    query = query + ":Loc" + count.ToString() + ",";

    parameters.Add("Loc" + count.ToString(), Location);

    count++;
}
query=query.TrimEnd(',');
query = query + ")";

dr=objConexion.ExecuteQuery(query, parameters, objConexion.OracleCnn);


public OracleDataReader ExecuteQuery(String query, Dictionary<string,string> Parameters, OracleConnection oracleCnn)
{
    OracleDataReader OracleDr;
    OracleCommand OracleCmd;
    try
    {


        OracleCmd = oracleCnn.CreateCommand();
        OracleCmd.CommandText = query;


        foreach (KeyValuePair<string, string> kvp in Parameters)
        {

            OracleCmd.Parameters.AddWithValue(kvp.Key, kvp.Value);

        }

        OracleCmd.Prepare();
        OracleDr = OracleCmd.ExecuteReader();

    }
    catch
    {
        OracleDr = null;
    }

    return OracleDr;
}

出于某种原因,该代码有时可以正常工作,而另一些则无法运行,在调试之后,我注意到Datareader的“ HasRows”方法存在异常,特别是无效数字异常。 我尝试直接在DBMS上运行结果查询,并且查询执行得很好,有人知道为什么会发生这种异常吗? 我想念什么?

执行以下操作查找问题:

 OracleCmd.Parameters.AddWithValue(kvp.Key, int.Parse(kvp.Value));

我认为,您在某个位置传递了一些“错误整数”。请参见此sql错误“ ORA-01722:无效数字”

并请删除

OracleCmd.Prepare();

另一件事,为什么您将连接传递给

public OracleDataReader ExecuteQuery(String query, 
                                     Dictionary<string,string> Parameters, 
                                     OracleConnection oracleCnn)

在执行之前传递连接字符串并打开连接。 使用适当的CommandBehavior

MSDN :[CommandBehavior.CloseConnection]执行命令时,如果关闭了关联的DataReader对象,则关闭了关联的Connection对象。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM