由于之前系统是通过IBatisNet使用mssql数据库,后来客户说想改成为oracle,但转换中出现一个问题:
就是通过传输GUID参数时出现:错误"将参数值从 Guid 转换到 Byte[] 失败",使用mssql时是正常的。
<delete id="bw_Users_Delete" parameterClass="guid">
     DELETE FROM bw_Users WHERE [UserId] = #value#
</delete>一个做法,只能把所有GUID型变量改为string,但这样做法导致系统改动很大,请问有没有更好的方法,谢谢!小弟第一次使用oracle,请各位大虾看看!以下为详细错误信息:   在 System.Data.OracleClient.OracleParameter.CoerceValue(Object value, MetaType destinationType)
   在 System.Data.OracleClient.OracleParameter.SetCoercedValueInternal(Object value, MetaType metaType)
   在 System.Data.OracleClient.OracleParameterBinding.PrepareForBind(OracleConnection connection, Int32& offset)
   在 System.Data.OracleClient.OracleCommand.Execute(OciStatementHandle statementHandle, CommandBehavior behavior, Boolean needRowid, OciRowidDescriptor& rowidDescriptor, ArrayList& resultParameterOrdinals)
   在 System.Data.OracleClient.OracleCommand.ExecuteNonQueryInternal(Boolean needRowid, OciRowidDescriptor& rowidDescriptor)
   在 System.Data.OracleClient.OracleCommand.ExecuteNonQuery()
   在 IBatisNet.DataMapper.Commands.DbCommandDecorator.System.Data.IDbCommand.ExecuteNonQuery()
   在 IBatisNet.DataMapper.MappedStatements.MappedStatement.ExecuteUpdate(ISqlMapSession session, Object parameterObject)
   在 IBatisNet.DataMapper.SqlMapper.Update(String statementName, Object parameterObject)
   在 Botwave.Extension.IBatisNet.IBatisMapper.Update(String statementId, Object paramValue) 位置 E:\project\DGCM-ITSF-2010\OracleTest\Botwave.Extension.IBatisNet\IBatisMapper.cs:行号 43
   在 Botwave.Security.IBatisNet.UserService.UpdateUser(UserInfo item) 位置 E:\project\DGCM-ITSF-2010\OracleTest\Botwave.Security.IBatisNet\UserService.cs:行号 24
   在 contrib_security_pages_EditUser.btnEdit_Click(Object sender, EventArgs e) 位置 e:\project\DGCM-ITSF-2010\OracleTest\Web\contrib\security\pages\EditUser.aspx.cs:行号 147
   在 System.Web.UI.WebControls.Button.OnClick(EventArgs e)
   在 System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument)
   在 System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument)
   在 System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument)
   在 System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData)
   在 System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)

解决方案 »

  1.   

    SQL> 
    SQL> CREATE TABLE aaa
      2  AS
      3  SELECT sys_guid() a FROM dual;
     
    Table created
     
    SQL> desc aaa
    Name Type    Nullable Default Comments 
    ---- ------- -------- ------- -------- 
    A    RAW(16) Y                         
     
    SQL> 
      

  2.   

    谢谢!但sys_guid()不是只能得到E3E74EA9DD6E41A79EA7FDEBA9422BA1跟c#中得到的guid:
    57CA1A90-7DE1-4047-A5F3-49D122B2880E 怎么去转换呢。
      

  3.   

    因为我使用是ibatisnet,那么之前的程序实体类字段类型都是以guid来定义,那把在oracle中读取出来的字段直接付值是“GUID 应包含带 4 个短划线的 32 位数(xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)”的。这个问题又怎么解决呢。。我所问应该是:在.net-ibatisnet-oracle这ibatisnet怎么去满足到guid的转换呢。。谢谢!
    刚才接触oracle,所以有太多太多的问题!