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;也嘗試指定大小。 任何想法有什麼不對?