我在oracle DB中有一个视图,我试图从一个方法中调用它来将视图中的数据绑定到数据表中,但它引发了异常。
请帮助我。
异常是在这一行中产生的( dataAdapter.Fill(dataTable);)
private static void ViewSelectedJobHistory(Document imDocument, Job selectedJob)
{
DataTable dataTable = new DataTable();
try
{
if (imDocument != null && selectedJob != null)
{
//string query =JobResource.QueryJobHistory;
//int id=selectedJob.ID;
//using (Command imCommand = new Command(query, imDocument.Connection))
string query = string.Format("select FID,F_CLASS_NAME,JOB_OPERATION_TYPE,OPERATION_DATE from JOB_EXPLORER_FETCH where JOB_ID={0}",selectedJob.ID);
//"select FID,F_CLASS_NAME,JOB_OPERATION_TYPE,OPERATION_DATE from JOB_EXPLORER_FETCH where JOB_ID=34680";
string abc = query;
using (Command imCommand = new Command(query, imDocument.Connection))
{
imCommand.Parameters.Add(new DataParameter("1", DbDataType.String, selectedJob.ID.ToString(), ParameterDirection.Input));
using (DataAdapter dataAdapter = new DataAdapter(imCommand))
{
dataAdapter.Fill(dataTable);
if (dataTable != null && dataTable.Rows.Count > 0 )
{
if (instanceJob == false)
{
ViewSelectedJobHistory viewSelectedJobHistory = new ViewSelectedJobHistory(imDocument, dataTable, selectedJob);
viewSelectedJobHistory.Show();
instanceJob = true;
}
}
你试图两次绑定参数,而且也没有使用Oracle库(猜测是因为我没有看到你的连接打开代码)。
SQL命令应该是这样的。
string query = "select FID,F_CLASS_NAME,JOB_OPERATION_TYPE,OPERATION_DATE from JOB_EXPLORER_FETCH where JOB_ID=:0";
然后当你添加参数时,它应该用你的值替换掉:0。 这也是避免SQL注入攻击的关键。 另外你应该使用一个OracleParameter类。
imCommand.Parameters.Add(new OracleParameter("1", OracleDbType.NVarchar2, 100, selectedJob.ID.ToString(), ParameterDirection.Input));