我有以下代码:
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上运行生成的查询并且它执行得很好,有没有人知道为什么会发生这种异常?我错过了什么?。
答案 0 :(得分:0)
执行以下操作以查找问题:
OracleCmd.Parameters.AddWithValue(kvp.Key, int.Parse(kvp.Value));
我想,你在其中一个地方传递了一些“坏整数” 见sql error "ORA-01722: invalid number"
请取消
OracleCmd.Prepare();
另一件事,为什么要将连接传递给
public OracleDataReader ExecuteQuery(String query,
Dictionary<string,string> Parameters,
OracleConnection oracleCnn)
在执行之前传递连接字符串并打开连接。使用适当的CommandBehavior
MSDN :[CommandBehavior.CloseConnection]执行该命令时,关闭关联的DataReader对象时关闭关联的Connection对象。