2014-10-06 166 views
0

我試圖使用oracle參數傳遞參數。它工作正常,在int型,但對我的字符串類型的失敗與錯誤:C#oracle嘗試傳遞字符串參數 - ORA-01722:無效號碼

ORA-01722: invalid number 
[OracleException (0x6ba): ORA-01722: invalid number] 
    OracleInternal.ServiceObjects.OracleCommandImpl.VerifyExecution(OracleConnectionImpl connectionImpl, Int32& cursorId, Boolean bThrowArrayBindRelatedErrors, OracleException& exceptionForArrayBindDML, Boolean& hasMoreRowsInDB, Boolean bFirstIterationDone) +1047 
    OracleInternal.ServiceObjects.OracleCommandImpl.ExecuteReader(String commandText, OracleParameterCollection paramColl, CommandType commandType, OracleConnectionImpl connectionImpl, OracleDataReaderImpl& rdrImpl, Int32 longFetchSize, Int32 lobPrefetchSize, OracleDependencyImpl orclDependencyImpl, Int64[] scnForExecution, Int64[]& scnFromExecution, OracleParameterCollection& bindByPositionParamColl, Boolean& bBindParamPresent, Boolean isDescribeOnly, Boolean isFromEF) +13029 
    Oracle.ManagedDataAccess.Client.OracleCommand.ExecuteReader(Boolean requery, Boolean fillRequest, CommandBehavior behavior) +2739 
    Oracle.ManagedDataAccess.Client.OracleCommand.ExecuteReader() +210 
    Oracle.ManagedDataAccess.Client.OracleCommand.ExecuteScalar() +406 
    AspWebReqManagedOracleTest.ParameterizedSql.ExecScalarQuery() in c:\max\git_root\oboe-test\automation\chef-repo\site-cookbooks\fixture\files\default\win_dotnet_sample_apps\AspWebReqManagedOracleTest\ParameterizedSql.aspx.cs:68 
    AspWebReqManagedOracleTest.ParameterizedSql.Page_Load(Object sender, EventArgs e) in c:\max\git_root\oboe-test\automation\chef-repo\site-cookbooks\fixture\files\default\win_dotnet_sample_apps\AspWebReqManagedOracleTest\ParameterizedSql.aspx.cs:21 
    System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +51 
    System.Web.UI.Control.OnLoad(EventArgs e) +92 
    System.Web.UI.Control.LoadRecursive() +54 
    System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +772 

這裏是我的代碼:

OracleConnection conn = new OracleConnection(connectionString); 
try 
{ 
    conn.Open(); 
    OracleCommand cmd = new OracleCommand(); 
    cmd.Connection = conn; 
    cmd.CommandText = "SELECT count(*) from SALES_ADVENTUREWORKS2012.SALESORDERDETAIL where (PRODUCTID=:productid or ROWGUID like :rowguid) and ROWNUM<:limit"; 
    cmd.Parameters.Add(new OracleParameter("limit", 90)); 
    cmd.Parameters.Add(new OracleParameter("productid", 773)); 
    OracleParameter par = new OracleParameter("rowguid", OracleDbType.Char); 
    par.Value = "hi"; 
    cmd.Parameters.Add(par); 

    cmd.CommandType = CommandType.Text; 
    object o = cmd.ExecuteScalar(); 
} 
finally 
{ 
    conn.Close(); 
} 

需要注意的是,如果我把這個字符串參數ROWGUID嵌入查詢,它工作正常(所以'限制'和'productid'參數沒有錯)。 我試過用Char,NChar,NVarchar2;也嘗試指定大小。 任何想法有什麼不對?

回答

0

正如我所說,查詢工作正常時,不使用參數。 爲了使它工作,我不得不刪除最後一個條件:

where ROWNUM<:limit 
相關問題