Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# OracleDataReader HasRows引发无效数字异常_C#_Oracle - Fatal编程技术网

C# OracleDataReader HasRows引发无效数字异常

C# OracleDataReader HasRows引发无效数字异常,c#,oracle,C#,Oracle,我有以下代码: 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) {

我有以下代码:

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;
}
int count=0;
OracleDataReader博士;
参数=新字典();
参数。添加(“用户名”,用户名);
query=“从表1中选择键,其中USERID=:用户名并输入(”;
foreach(位置中的字符串位置)
{
query=query+”:Loc“+count.ToString()+”,”;
parameters.Add(“Loc”+count.ToString(),位置);
计数++;
}
query=query.TrimEnd(',');
查询=查询+”;
dr=objConexion.ExecuteQuery(查询,参数,objConexion.OracleCnn);
公共OracleDataReader ExecuteQuery(字符串查询、字典参数、OracleConnection oracleCnn)
{
OracleDataReader OracleDr;
OracleCmd命令;
尝试
{
OracleCmd=oracleCnn.CreateCommand();
OracleCmd.CommandText=查询;
foreach(参数中的KeyValuePair kvp)
{
OracleCmd.Parameters.AddWithValue(kvp.Key,kvp.Value);
}
OracleCmd.Prepare();
OracleDr=OracleCmd.ExecuteReader();
}
抓住
{
OracleDr=null;
}
返回OracleDr;
}

由于某些原因,代码有时可以正常工作,而另一些则不行。调试后,我注意到,当代码不工作时,Datareader的“HasRows”方法上有一个异常,特别是一个无效数字异常。我已经尝试过直接在DBMS上运行结果查询,它执行得非常完美,有人知道为什么会发生这种异常吗?我遗漏了什么?

请执行以下操作以查找问题:

 OracleCmd.Parameters.AddWithValue(kvp.Key, int.Parse(kvp.Value));
我想,你在其中一个位置传递了一些“坏整数” 看到这个了吗

请把它拿走

OracleCmd.Prepare();
另一件事,为什么要将连接传递到

public OracleDataReader ExecuteQuery(String query, 
                                     Dictionary<string,string> Parameters, 
                                     OracleConnection oracleCnn)
公共OracleDataReader ExecuteQuery(字符串查询, 字典参数, OracleConnection(oracleCnn) 在执行之前传递连接字符串并打开连接。使用适当的
CommandBehavior


MSDN:[CommandBehavior.CloseConnection]执行命令时,关联的DataReader对象关闭时,关联的连接对象关闭。

能否提供异常?还是仅仅是无效号码当字符串转换为数字失败时,在oracle中抛出InvalidNumber。请提供列类型的表说明。ORA-01722:无效数字,尽管在调试时查看它时,它只显示:HasRows'dr.HasRows'生成了一个异常'System.Data.OracleClient.OracleException'。我选择的键列是一个整数,UserID是一个varchar2。问题不在参数上,因为查询有时会起作用,我尝试了它,但得到了相同的结果,(还尝试删除Prepare语句。正在传递连接,因为我有一个包含不同连接字符串的自定义连接对象(适用于不同的环境)它根据一个参数打开相应的连接,在我发布代码段之前和之后的代码中正确地打开和关闭连接。这可能不是最好的方法,但这是我必须处理的。@user3255067错误发生在哪一行代码中?设法找到问题,它实际上在我发布的代码段之外发布后,这是一个逻辑错误,有时会发送字符串,而不是您建议的整数作为参数,谢谢。