从EnterpriseLibrary获取LONG RAW数据(字节)的方法

7

我在从Oracle获取图像字节数据时遇到了问题。 reader("image") 总是返回0长度。有什么解决方法吗?如果我使用 oledb,它可以工作,但无法与 Microsoft EnterpriseLibrary 一起使用。

using (IDataReader reader = ExecuteNonQueryOracle(Query)) 
    {
            while (reader.Read) {
                dict("image") = reader("image");
            }
    }
public object ExecuteNonQueryOracle(string Query)
{

        using (dbCommand == CurrentDatabase.GetSqlStringCommand(Query)) {
            dbCommand.CommandType = CommandType.Text;
            return CurrentDatabase.ExecuteReader(dbCommand);
        }

}

"ExecuteNonQueryOracle" 这个方法名相当具有误导性。 - mjwills
@mjwills 我只是为了理解问题而这样做。 - shaair
2个回答

1
如果ExecuteNonQuery方法返回0,那么一个很明显的原因可能是您查询的where子句与表中的任何行都不匹配。
我从网上得到了这个线程,这可能会有所帮助。
我遇到的另一种情况是,当我使用企业库数据应用程序块执行Update SQL查询时,使用ExecuteNonQuery方法传递输入参数时,我正在使用Database对象的AddInParameter方法,而这些输入参数的顺序与我的Update SQL中参数的顺序不匹配,特别是在where子句中的输入参数。因此,一旦我使用AddInParameter在一堆AddInParameter子句的末尾传递where子句参数,问题立即得到解决。

我已经在上面提到过,通过oledb连接它返回数据。问题只出现在EnterpriceLibrary上。 - shaair

0

尝试使用 OracleDataReaderOracleBlob 作为数据类型:

using (OracleDataReader reader = cmd.ExecuteReader())
{
   while (reader.Read())
      {
         if (!reader.IsDBNull(reader.GetOrdinal("FILE")))
               {
                 OracleBlob doc = reader.GetOracleBlob(reader.GetOrdinal("FILE"));
                  if (!doc.IsNull)
                   {
                       docBytes = new byte[doc.Length];
                       doc.Read(docBytes, 0, (int)doc.Length);
                   }
               } 
      }
}

我只有一个选项可以使用Enterprise Library。 - shaair

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接