日期:2014-05-18  浏览次数:21015 次

C#代码如何将Access OLE对象(图片)保存在SQLSERVER 的image字段中,送高分!
请问,在从SQLSERVER 的image 字段导入Access 的 OLE对象字段和 从Access OLE对象字段导入SQLSERVER 的image 字段时分别要进行怎样的处理?

实例如下:
Access数据库的 A表中有一列为OLE对象类型,存放上传的图片文件。
我试着直接 select A表然后 insert into 到 Sql server中的B表,从B表下载该文件的时候能打开文件,但是内容却显示为“System.Byte[]”
请问是不是不能直接把Access表的 OLE对象字段插入Sql server的 Image字段呢?如果要解决这个问题,需要做怎样的处理呢?
具体代码:
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Drawing;
using System.ComponentModel;
using System.Data.OleDb;
using System.IO;
using System.Data.SqlClient;

public partial class view : System.Web.UI.Page
{
  protected void Page_Load(object sender, EventArgs e)
  {

   
  OleDbConnection OleConn = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=.\db1.mdb");
  SqlConnection sqlconn = new SqlConnection("Sql数据库连接");
  OleConn.Open();
  sqlconn.Open();
  string ss = "select Image1 from image1 where id=27";
   
  OleDbCommand comm = new OleDbCommand(ss, OleConn);//access数据库
  try
  {
  byte[] img = (Byte[])comm.ExecuteScalar();
  string sqlss="insert into school(photo) values('"+img+"')";
  SqlCommand sqlcomm=new SqlCommand(sqlss,sqlconn);//插入到sql数据库
  sqlcomm.ExecuteNonQuery();
  // Response.BinaryWrite(img);
  // Response.ContentType = "image/jpeg";
  }
  catch
  {
   
  }
  sqlconn.Close();
  OleConn.Close();

  }
}


------解决方案--------------------
这个要拆解OLE 外壳, 你得研究OLE的对象结构

然后把真正的图像内容摘出来, 存到sqlserver中
------解决方案--------------------
string sqlss="insert into school(photo) values(@img)";
SqlCommand sqlcomm=new SqlCommand(sqlss,sqlconn);//插入到sql数据库
sqlcomm.Parameters.AddWithValue("@img",img)

ole不是字符串,不能写 string sqlss="insert into school(photo) values('"+img+"')";