【发布时间】:2012-04-01 05:59:40
【问题描述】:
我收到了这个错误消息:
System.ArgumentException 未处理 不支持类型为 Devart.Data.Oracle.OracleParameter 的 Message=Value。
...使用此代码:
OracleParameter pRes = new OracleParameter("C_REF", OracleDbType.Cursor);
pRes.Direction = ParameterDirection.ReturnValue;
oracleCommand1.Parameters.Clear();
int iFromYear = dateTimePickerFrom.Value.Year;
int iFromMonth = dateTimePickerFrom.Value.Month;
int iFromDay = dateTimePickerFrom.Value.Day;
int iToYear = dateTimePickerTo.Value.Year;
int iToMonth = dateTimePickerTo.Value.Month;
int iToDay = dateTimePickerTo.Value.Day;
oracleCommand1.Parameters.Add("iStartDate", new DateTime(iFromYear, iFromMonth, iFromDay));
oracleCommand1.Parameters.Add("iEndDate", new DateTime(iToYear, iToMonth, iToDay));
oracleCommand1.Parameters.Add("iCATEGORYID", 114);
oracleCommand1.Parameters.Add("c_ref", pRes);
oracleConnection1.Open();
oracleCommand1.ExecuteCursor();
根据评论更新:
那么可以用什么代替OracleParameter来传递呢?
当我把它改成这个时(我只是像一只受苦的小鸡一样四处乱窜):
oracleConnection1.Open();
OracleDataReader myReader = oracleCommand1.ExecuteReader();
OracleParameter pRes = new OracleParameter("C_REF", myReader);
pRes.Direction = ParameterDirection.InputOutput; // <-- devArt's code
oracleCommand1.Parameters.Clear();
int iFromYear = dateTimePickerFrom.Value.Year;
int iFromMonth = dateTimePickerFrom.Value.Month;
int iFromDay = dateTimePickerFrom.Value.Day;
int iToYear = dateTimePickerTo.Value.Year;
int iToMonth = dateTimePickerTo.Value.Month;
int iToDay = dateTimePickerTo.Value.Day;
oracleCommand1.Parameters.Add("iStartDate", new DateTime(iFromYear, iFromMonth, iFromDay));
oracleCommand1.Parameters.Add("iEndDate", new DateTime(iToYear, iToMonth, iToDay));
oracleCommand1.Parameters.Add("iCATEGORYID", 114);
oracleCommand1.Parameters.Add("c_ref", pRes);
while (myReader.Read())
{
;// Console.WriteLine(myReader.GetInt32(0) + ", " + myReader.GetString(myReader.GetOrdinal("DName")));
}
// always call Close when done reading.
myReader.Close();
...我也没有收到错误消息,但我也没有收到任何数据。
更新到更新:
好的,我终于让它工作了。这些可能并不优雅,但它确实可以检索数据:
oracleCommand1.Parameters.Clear();
int iFromYear = dateTimePickerFrom.Value.Year;
int iFromMonth = dateTimePickerFrom.Value.Month;
int iFromDay = dateTimePickerFrom.Value.Day;
int iToYear = dateTimePickerTo.Value.Year;
int iToMonth = dateTimePickerTo.Value.Month;
int iToDay = dateTimePickerTo.Value.Day;
oracleCommand1.Parameters.Add("iStartDate", new DateTime(iFromYear, iFromMonth, iFromDay));
oracleCommand1.Parameters.Add("iEndDate", new DateTime(iToYear, iToMonth, iToDay));
oracleCommand1.Parameters.Add("iCATEGORYID", 114);
oracleConnection1.Open();
OracleDataReader myReader = oracleCommand1.ExecuteReader();
OracleParameter pRes = new OracleParameter("C_REF", myReader);
pRes.Direction = ParameterDirection.InputOutput;
oracleCommand1.Parameters.Add("c_ref", pRes);
while (myReader.Read())
{
MessageBox.Show(myReader.GetString(0)); // + ", " + myReader.GetString(myReader.GetOrdinal("contactemail")));
}
myReader.Close();
不过,现在:我如何才能检索所有数据,而不是像上面所做的那样仅从一列中检索?最好的情况是将结果集定向到 DataGridView,但如果必须,我可以连接 (stringFormat()) 我想要的各种列,并以编程方式将它们添加到备忘录或类似的...
【问题讨论】:
标签: c# oracle devart dotconnect