0

I have the following which looks to be ok, but for some reason it's throwing ORA-00936: missing expression

...
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

In debug, I can see the parameter values are binded correctly. So what am I doing wrong?

Any help would be greatly appreciated.

2
  • use try catch you will get proper error Commented Aug 9, 2016 at 4:50
  • @HiteshThakor The image above is generated from a try catch exception. Commented Aug 9, 2016 at 4:54

2 Answers 2

1

What Mick said above is correct.

OleDbCommand and OdbCommand does not support named parameters and uses the ? placeholder instead, so the order of the parameters is important. However, you can give names to its parameters instead of using ?, for readability purposes like below:

...
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();
}
...
Sign up to request clarification or add additional context in comments.

Comments

0

Ok found the answer here

Apparently need to use ? for binding with OLEDB in ORACLE 0_o

The following works..

...
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();
}
...

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.