2014-09-03 43 views
0

我正在寫入一個將BLOB文件插入到ORACLE中的函數。在執行代碼時,我收到錯誤,指出ORA-00936: missing expressionORA-00936:在C#中執行時缺少表達式。

我的代碼:

public static void DatabaseFilePut(MemoryStream fileToPut, OracleConnection con) 
    { 
    try 
     { 
     byte[] file = fileToPut.ToArray(); 
     const string preparedCommand = @"INSERT INTO user_account_statement (statement_id,session_key,login_id,user_id,account_number, 
     from_date,todate,ipaddress, 
     create_date_time,STATEMENT_FILE) VALUES(1073,'fe79e0345986b5a439c26f731234868b53f877366f529', 
     2335,'204254','108142',to_date('2014-08-23 16:45:06','yyyy-mm-dd hh24:mi:ss'), 
     to_date('2014-08-23 16:45:06','yyyy-mm-dd hh24:mi:ss'), 
     '106.79.126.249',to_date('2014-08-23 16:45:06','yyyy-mm-dd hh24:mi:ss'),file)"; 
     using (var sqlWrite = new OracleCommand(preparedCommand, con)) 
     { 
     sqlWrite.ExecuteReader(); 
     } 
     } 
     catch (Exception ex) 
     { 
     MessageBox.Show(ex.ToString()); 
     } 
    } 

請告知我要去的地方錯了。

+0

問題是你提供的最後一個值'file'。這不是你的'byte []'引用,因爲它和語句中的引用之間沒有聯繫。甲骨文似乎在給這個特定的錯誤,因爲它是一個保留字;別的東西會給ORA-00984。您需要將對象與語句中的變量綁定爲流;但我沒有在C#中這樣做的經驗,所以如果你不知道如何做,那麼其他人將不得不添加一個答案。 – 2014-09-03 11:20:36

回答

0

我指定的參數爲 '文件'

sqlWrite.BindByName = true; 
       var blobparameter = new OracleParameter 
       { 
        OracleDbType = OracleDbType.Blob, 
        ParameterName = "ssfile", 
        Value = fileToPut.ToArray() 
       }; 
       sqlWrite.Parameters.Add(blobparameter); 

和變化的參數名稱了。因爲參數名稱file是ORACLE的保留字。所以它可能會造成另一個問題。