标题:如何显示保存在数据表字段中的文件(如word文档、CAD图纸)?
只看楼主
guxinglengyue
Rank: 1
等 级:新手上路
帖 子:50
专家分:0
注 册:2006-7-17
得分:0 
AAA
是啊,在VFP中文件会变得很大,我想在SQL中也一样的吧,不过存取效率会比VFP的数据库好吧
要保存到IMAGE字段,必须把文件内容转化为byte[]类型才能存进去,转化方法:
FileStream fs = new FileStream(ofd.FileName, FileMode.Open, FileAccess.Read);
imgData = new byte[fs.Length];
fs.Read(imgData, 0, (int) fs.Length);
fs.Close();
注:ofd为OpenFileDialog的一个实例,imgData是事前申明的byte[]类型的变量,这样就把在ofd中选择的文件内容转化成byte[]类型了。
2006-12-02 09:59
jockey
Rank: 3Rank: 3
等 级:论坛游民
威 望:8
帖 子:977
专家分:52
注 册:2005-12-4
得分:0 
谢谢楼主!
转化方法我会,但是一个数据表不仅仅包含图像字段,肯定也有其他信息的字段,我们可以用SqlCommandBuilder方便的进行数据表的添加、删除、保存操作。我的意思是在对其他字段进行添加、删除、保存操作的时候也同时对图像字段进行操作。可俺就不会弄了......

主要是参数不知该怎么加?
DataRow dr = dt.NewRow();
dr["名称"]=this.lpmc.Text;
dr["图片"]=??????++参数怎么弄的?
dt.Rows.Add(dr);
da.Update(ds, "lpxx");

2006-12-02 10:05
guxinglengyue
Rank: 1
等 级:新手上路
帖 子:50
专家分:0
注 册:2006-7-17
得分:0 
AAA
或许我不太明白你的意思
dr["图片"] = imgData; //imgData的意思同上
比如用imgData保存当前记录的图片字段的值,如果用ofd.ShowDialog()选择了另外一个图片,则imgData保存这个图片的值,最后按“保存”按钮后执行上面这行代码就行了
2006-12-02 10:15
jockey
Rank: 3Rank: 3
等 级:论坛游民
威 望:8
帖 子:977
专家分:52
注 册:2005-12-4
得分:0 
哦,谢谢!我再试试吧!

另外楼主:你保存word文件的文件名怎么弄得啊?openFileDialog.FileName得到的可是带路径的字符串(例:"C:\doc\...\temp.doc"),如果保存在数据库中文件名的话只要("temp.doc")啊

2006-12-02 10:40
guxinglengyue
Rank: 1
等 级:新手上路
帖 子:50
专家分:0
注 册:2006-7-17
得分:0 
AAA
string title = (new FileInfo(ofd.FileName)).Name;就得到了不带路径的文件名!
2006-12-02 11:11
jockey
Rank: 3Rank: 3
等 级:论坛游民
威 望:8
帖 子:977
专家分:52
注 册:2005-12-4
得分:0 

只能说感谢!
楼主:你的Word怎么读出来?怎么写入临时文件?我读出来的文件内容都一样:" System.IO.MemoryStream"

读Doc数据:
Byte[] byteBLOBData = new Byte[0];
byteBLOBData = (Byte[])(ds.Tables["lpxx"].Rows[c]["存储Doc字段"]);
MemoryStream stmBLOBData = new MemoryStream(byteBLOBData);

写临时文件并启动Word:

if (File.Exists("temp.doc"))
File.Delete("temp.doc");

FileStream fileStreamObject = new FileStream("temp.doc", FileMode.CreateNew);
BinaryWriter binaryWriterObject = new BinaryWriter(fileStreamObject);
binaryWriterObject.Write(stmBLOBData.ToString());//这个地方可能有问题!!!!!!!
fileStreamObject.Close();
binaryWriterObject.Close();

try
{
System.Diagnostics.Process proc = new System.Diagnostics.Process();
proc.StartInfo.FileName = @"winword.exe"; //程序名称
proc.StartInfo.Arguments = @"temp.doc";
proc.Start();
}
catch { MessageBox.Show("启动Word错误!", "错误", MessageBoxButtons.OK, MessageBoxIcon.Stop); }


2006-12-02 11:57
jockey
Rank: 3Rank: 3
等 级:论坛游民
威 望:8
帖 子:977
专家分:52
注 册:2005-12-4
得分:0 
楼主快帮忙看看啊,我写入temp.doc后根本打不开,你写入临时文件是怎么解决的?帮忙看看啊!

2006-12-02 12:27
guxinglengyue
Rank: 1
等 级:新手上路
帖 子:50
专家分:0
注 册:2006-7-17
得分:0 
AAA
    你留个QQ号吧,方便一点,刚才网页打不开
2006-12-02 13:39
jockey
Rank: 3Rank: 3
等 级:论坛游民
威 望:8
帖 子:977
专家分:52
注 册:2005-12-4
得分:0 
QQ:623241938

问题已解决!多谢楼主!

2006-12-02 14:22



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-104818-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.280528 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved