【问题标题】:insert binary data into firebird BLOB field将二进制数据插入 firebird BLOB 字段
【发布时间】:2014-04-15 14:39:35
【问题描述】:

我正在尝试将 pdf 文件记录到 firebird 数据库中,但在 firebird 中,该字段是 BLOB 类型,而 C# 代码没有此选项。按照我的代码:

public void databaseFilePut(string varFilePath) {

            OleDbConnection cn = new OleDbConnection("MinhaConexao");
            byte[] imagem;

            FileStream fs = new FileStream(varFilePath, FileMode.Open);
            BinaryReader br = new BinaryReader(fs);
            long numBytes = new FileInfo(varFilePath).Length;
            imagem = br.ReadBytes((int)numBytes);
            string _sql = "insert into GD_ARQUIVODOC (GD_ARQDOCARQUIVO) values (?)";
            cn.Open();
            OleDbCommand cmd = new OleDbCommand(_sql, cn);   
            cmd.Parameters.Add("?", OleDbType.VarBinary).Value = imagem;
            cmd.ExecuteNonQuery();
            cn.Close();

这有什么问题吗?错误是:参数值不可读。为什么?有人可以帮助我吗?暂且

【问题讨论】:

  • BTW:据我所知,使用Parameters.Add("?", .... 对位置参数无效。您需要指定索引,或者什么都不指定。

标签: c# pdf blob firebird


【解决方案1】:

查看this example on the IBProvider site:

using (OleDbConnection con = ConnectionProvider.CreateConnection())
{
    con.Open();
    OleDbTransaction trans = con.BeginTransaction ();
    OleDbCommand cmd = new OleDbCommand(...);
    //....
    OleDbParameter blob = new OleDbParameter();
    blob.OleDbType = OleDbType.LongVarBinary;
    blob.Value = /// a byte[]
    cmd.Parameters.Add(blob);
    cmd.ExecuteNonQuery();
    trans.Commit();
}

【讨论】:

  • 你怎么称呼Parameters.Add?如果它与您最初的问题相同,那可能是问题的一部分。
【解决方案2】:

请允许我在这个答案中使用我们自己的 .NET Provider :)

using System;
using System.Data;
using lcpi.data.oledb; //LCPI .NET Data Provider for OLEDB

namespace ConsoleApplication1
{
 class Program
 {
  private const string c_cn_str
   ="provider=LCPI.IBProvider.3;"
   +"location=localhost:d:\\database\\ibp_test_fb25_d3.gdb;"
   +"user id=gamer;"
   +"password=vermut;"
   +"dbclient_library=fbclient.dll";

  static void Main(string[] args)
  {
   try
   {
    using(var cn=new OleDbConnection(c_cn_str))
    {
     cn.Open();

     using(var tr=cn.BeginTransaction(IsolationLevel.RepeatableRead))
     {
      using(var cmd=new OleDbCommand("",cn,tr))
      {
       cmd.CommandText
        ="insert into BIN_BLOB_TABLE (BIN_DATA) values(:bin)\n"
         +"returning TEST_ID\n"
         +"into :id";

       cmd["bin"].Value=new byte[]{1,2,3};

       cmd.ExecuteNonQuery();

       var rec_id=cmd["id"].Value;

       cmd.CommandText
        ="select BIN_DATA from BIN_BLOB_TABLE where TEST_ID=:x";

       cmd["x"].Value=rec_id;

       var data=(byte[])cmd.ExecuteScalar();

       for(int i=0;i!=data.Length;++i)
        Console.WriteLine("[{0}]: {1}",i,data[i]);
      }//using cmd

      tr.Commit();
     }//using tr
    }//using cn
   }
   catch(Exception e)
   {
    Console.WriteLine("ERROR: {0} - {1}",e.Source,e.Message);
   }//catch
  }//Main
 }//Program
}//namespace ConsoleApplication1

【讨论】:

    猜你喜欢
    • 2015-06-09
    • 1970-01-01
    • 2015-07-22
    • 1970-01-01
    • 2010-10-18
    • 2010-09-27
    • 2010-11-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多