C#.NET使用SQLSERVER的IMAGE字段初探

zw19791018 2012-05-22 02:35:33
本人使用VFP9编写有一套PDM文档管理系统,CS架构的,现在想往BS架构转移。SQL数据库中字符、数字类字段可以直接从WEB页中访问,2种架构共享了同一个数据库。但是,PDM文档都存放在了IMAGE和TEXT两种字段中,BS架构无法正确取出。

在VFP9中,提供有2个函数,StrToFile()和FileToStr(),实现字符与文件间的相互转换。在VFP中,为了将存储于SQLSERVER的文件下载到本地,要用FileToStr()将文件转换成字符,再保存到TEXT类型的字段中。

将文件直接读入IMAGE类型字段中,不需要用函数。可以用OLE的方式,直接在VFP中打开文件对象。

在C#.NET中,不能这样。
通过
var cFileName = @"D:\CAXA.XLS";//D:\CAXA.EXB PICAD.DRF
var cFieldName = "imgfield";//imgfield

SqlConnection con = new SqlConnection(qjbl.gcConString);
SqlDataAdapter da = new SqlDataAdapter("Select focusmyid,imgfield From focusmy where focusmyid=11", con);
SqlCommandBuilder MyCB = new SqlCommandBuilder(da);//必须要
DataSet ds = new DataSet("MyImages");

da.MissingSchemaAction = MissingSchemaAction.AddWithKey;
FileStream fs = new FileStream(cFileName, FileMode.OpenOrCreate, FileAccess.Read);

byte[] MyData = new byte[fs.Length];
fs.Read(MyData, 0, System.Convert.ToInt32(fs.Length));

fs.Close();

da.Fill(ds, "MyImages");

var row0 = ds.Tables["MyImages"].Rows[0];
row0[cFieldName] = MyData;
da.Update(ds, "MyImages");

con.Close();
可以将文件上传到IMAGE类型的字段中。

通过
var cFileName = @"D:\FFFF.XLS";//D:\FFFF.EXB DRF
var cFieldName = "imgfield";

SqlConnection con = new SqlConnection(qjbl.gcConString);
SqlDataAdapter da = new SqlDataAdapter("Select * From focusmy where focusmyid=11", con);
SqlCommandBuilder MyCB = new SqlCommandBuilder(da);
DataSet ds = new DataSet("MyImages");

byte[] MyData = new byte[0];

da.Fill(ds, "MyImages");
DataRow myRow;
myRow = ds.Tables["MyImages"].Rows[0];

MyData = (byte[])myRow[cFieldName];
int ArraySize = new int();
ArraySize = MyData.GetUpperBound(0);

FileStream fs = new FileStream(cFileName, FileMode.OpenOrCreate, FileAccess.Write);
fs.Write(MyData, 0, ArraySize);
fs.Close();
可以下载文件到本地。


但是,下载程序只能保证 用C#上传的文件可以被下载后正确打开。
而用VFP上传的同一个字段,下载后,文件很大,且文件格式错误,不能打开。

对于TEXT字段,只能保存为文本文件。

所以,虽然同样是IMAGE字段,但是用不同语言编写的程序存入的内容是不一样的,不通用的。

各位高手如有类似需求且实现了不同架构语言间数据共享的功能,请不吝赐教。
...全文
146 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
zw19791018 2012-05-31
  • 打赏
  • 举报
回复
随便回复一下,我要结贴啊

7,765

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧