错误:ORA-00932: 不一致的数据类型: 要求 - 得到的却是 BLOB
源码: StringBuilder strSql = new StringBuilder();
                strSql.Append("SELECT UserID FROM Accounts_Users WHERE  Password= :Password");
        OracleParameter[] parameters = {
                           new OracleParameter("Password", OracleType.Blob,EncryptedPassword.Length)};
                parameters[0].Value = EncryptedPassword;
password 为blob类型。
EncryptedPassword 为byte[]类型.

解决方案 »

  1.   

    你可这样加 WHERE    utl_raw.cast_to_raw( Password )= :Password
      

  2.   

    hebo utl_raw.cast_to_raw是什么意思?
      

  3.   

    把BLOB转换成varchar型
    你可以试试,具体的我也不是很清楚
    我在做MD5加密时用到的
    MD5加密出来的就是BLOB型,不过我们需要加密后的数据是VARCHAR型
    所以需要这样转换下
      

  4.   

    不知道你用的是什么语言编程的,看SQL语句应该是在SQL里执行的语句
      

  5.   

    这是我的MD5加密函数,加密出来的是VARCHAR2
    CREATE OR REPLACE FUNCTION CHINA.MD5(
    passwd IN VARCHAR2) 
    RETURN VARCHAR2
    IS
     retval varchar2(32);
    BEGIN
     retval := utl_raw.cast_to_raw(DBMS_OBFUSCATION_TOOLKIT.MD5(INPUT_STRING => passwd)) ;
     RETURN retval;
    END;这上我C#里用的语句
                OracleConnection con = new OracleConnection(Session["oracle_con"].ToString());
                
                con.Open();
                string select = "SELECT ID,NM from TBwhere USER_ID='" + UserName + "' and USER_PSWD=md5('" + Password + "')";
                OracleDataAdapter da = new OracleDataAdapter(select, con);
                DataSet ds = new DataSet();
                da.Fill(ds);
      

  6.   

    其实我就是实现密码与库中的密码对比,要比较的密码中页面上的是byte[]类型, 库中的是blob类型,但是老是出这个错误
      

  7.   

    那你应该把你页面上的密码转换下啊
    CREATE OR REPLACE FUNCTION CHINA.MD5(
    passwd IN VARCHAR2) 
    RETURN VARCHAR2
    IS
     retval varchar2(32);
    BEGIN
     retval := utl_raw.cast_to_raw(DBMS_OBFUSCATION_TOOLKIT.MD5(INPUT_STRING => passwd)) ;
     RETURN retval;
    END;这里面你把utl_raw.cast_to_raw去掉再比较看看(把你页面上的密码代入)
      

  8.   

    不是啊,我用where 语句比较的,所以要用byte[]类型与库中对应的blob类型对比,这样出错的,有什么解决办法吗?