2016-08-09 2 views
0

У меня есть следующие, выглядит нормально, но по какой-то причине он бросает ORA-00936: missing expressionIssue команда работает INSERT с использованием OleDbCommand в C#

... 
var query = "INSERT INTO MY_TABLE VALUES (@id, @filepath, @filename, @filesize, @md5)"; 

using (var insertCmd = new OleDbCommand(query, conn)) 
{ 
    insertCmd.CommandType = CommandType.Text; 
    insertCmd.Parameters.AddRange(new OleDbParameter[] 
    { 
     new OleDbParameter("@id", FindItemId(filePath)), 
     new OleDbParameter("@filepath", filePath), 
     new OleDbParameter("@filename", new FileInfo(filePath).Name), 
     new OleDbParameter("@filesize", new FileInfo(filePath).Length), 
     new OleDbParameter("@md5", GetMd5Hash(filePath)) 
    }); 
    insertCmd.ExecuteNonQuery(); 
} 
... 

enter image description here

В отладки, я могу видеть значения параметров правильно привязан. Так что я делаю неправильно?

Любая помощь была бы принята с благодарностью.

+0

использовании попробовать поймать вы получите правильную ошибку –

+0

@HiteshThakor изображения выше генерируются из исключения попытки поймать. –

ответ

0

Ok нашел ответ here

Видимо нужно использовать ? для связывания с OLEDB в ORACLE 0_о

следующие работы ..

... 
var query = "INSERT INTO MY_TABLE VALUES (?, ?, ?, ?, ?)"; 

using (var insertCmd = new OleDbCommand(query, conn)) 
{ 
    insertCmd.CommandType = CommandType.Text; 
    insertCmd.Parameters.AddRange(new OleDbParameter[] 
    { 
     new OleDbParameter("?", FindItemId(filePath)), 
     new OleDbParameter("?", filePath), 
     new OleDbParameter("?", new FileInfo(filePath).Name), 
     new OleDbParameter("?", new FileInfo(filePath).Length), 
     new OleDbParameter("?", GetMd5Hash(filePath)) 
    }); 
    insertCmd.ExecuteNonQuery(); 
} 
... 
1

Что сказано выше Мик является правильным.

OleDbCommand и OdbCommand не поддерживает именованные параметры и использует? вместо этого, вместо этого, порядок параметров важен. Тем не менее, вы можете давать имена своим параметрам вместо использования, в целях удобочитаемости, как показано ниже:

... 
var query = "INSERT INTO MY_TABLE VALUES (?, ?, ?, ?, ?)"; 

using (var insertCmd = new OleDbCommand(query, conn)) 
{ 
insertCmd.CommandType = CommandType.Text; 
insertCmd.Parameters.AddRange(new OleDbParameter[] 
{ 
    new OleDbParameter("@id", FindItemId(filePath)), 
    new OleDbParameter("@filepath", filePath), 
    new OleDbParameter("@filename", new FileInfo(filePath).Name), 
    new OleDbParameter("@filesize", new FileInfo(filePath).Length), 
    new OleDbParameter("@md5", GetMd5Hash(filePath)) 
}); 
insertCmd.ExecuteNonQuery(); 
} 
... 
Смежные вопросы