c#读取sql2000中img类型的问题

forum2621 2009-07-02 12:12:53
数据库为sql2000,存img格式的字段名为:con_img。
数据录入是在access中进行的,除了图片格式外,con_img中还保存有其它多种文件类型(doc,pdf,rar等),目前在access中可以导出出文件(包括文件类型,文件名),现用c#来读取con_img字段,但是得不到原有的文件名和文件类型(由于没办法得到实际文件的名称及类型,故在程序中自定义了文件类型和名称),另外,读出的文件比实际文件大,导致读出的文件无法打开。
程序代码如下,帮忙解决下问题。
1. 从con_img字段中读取数据并导出文件到本地文件系统,要求文件是真实的文件而不是我自定义的文件名及类型(包括文件名及类型).
谢谢各位了。





protected void write_file(string sqlstr, SqlConnection conn )
{
if (conn.State != ConnectionState.Open)
conn.Open();
string num = "0";
string filepath = file_dir + "name_"+num+".pdf";
while (File.Exists(filepath))
{
num = Convert.ToString(Convert.ToInt32(filepath.Split('_').Last().ToString().Split('.').First().ToString()) + 1);
filepath = file_dir + "name_" + num + ".pdf";
}
SqlCommand cmd = new SqlCommand(sqlstr, conn);
cmd.CommandTimeout = 0;
SqlDataReader reader = cmd.ExecuteReader();

byte[] buffer;
FileStream fs = new FileStream(filepath, FileMode.Create, FileAccess.Write);
while (reader.Read())
{
buffer = (byte[])reader["con_img"];
fs.Write(buffer, 0, buffer.Length);

}
reader.Close();
fs.Close();
}

...全文
137 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
forum2621 2009-07-02
  • 打赏
  • 举报
回复
兄弟,File.WriteAllBytes("你取出的文件名",buffer);
文件名应该包含在img类型中吧,access都可以读出文件名,但是我用c#不晓得怎么取到文件名。
zgke 2009-07-02
  • 打赏
  • 举报
回复
FileStream fs = new FileStream(filepath, FileMode.Create, FileAccess.Write);
while (reader.Read())
{
buffer = (byte[])reader["con_img"];
fs.Write(buffer, 0, buffer.Length);

}

乱整呢...你都出出来保存到一个文件里?

while (reader.Read())
{
buffer = (byte[])reader["con_img"];
File.WriteAllBytes("你取出的文件名",buffer);
}
forum2621 2009-07-02
  • 打赏
  • 举报
回复
就是从sql中读取img数据,然后保存到本地。
kkun_3yue3 2009-07-02
  • 打赏
  • 举报
回复
没看懂要问什么
forum2621 2009-07-02
  • 打赏
  • 举报
回复
比如我存进去的文件实际大小是17,497,126 字节,文件名是”Acrobat 文档.pdf“,而我读出来的文件为17,646,954 字节,大小都不一样,那么读出来的文件肯定无效,所以我怀疑img格式的应该前边几个字节保留有文件名,要不不会多的,access可以读出来,c#还没找到读取方法。
这是第一部分,需要两部分一起才能解压 目录: 第1篇 编程经验与感悟篇 第1章 编程感悟6则 感悟01 程序员的成长之路 感悟02 程序员应具备的素质 感悟03 程序员的必备技能 感悟04 程序员的认识误区 感悟05 程序员的生涯规划 感悟06 未来IT发展趋势 第2章 编程经验谈6则 经验01 培养编程的兴趣 经验02 编程学习经验谈 经验03 代码规范经验谈 经验04 数据库设计经验谈 经验05 项目实战经验谈 第2篇 陷阱或谬误篇 第3章 不可忽视的30个技术陷阱 陷阱01 版本不一致产生的陷阱 陷阱02 结构初始化产生的陷阱 陷阱03 传递派生类产生的陷阱 陷阱04 用DataReader读取数据时产生的陷阱 陷阱05 类型转换时产生的陷阱 陷阱06 以DataReader作为返回类型的陷阱 陷阱07 GridView绑定DataReader产生的陷阱 陷阱08 SqlDateTime溢出陷阱 陷阱09 写网站XML文件产生的陷阱 陷阱10 访问下拉列表控件的SelectedValue属性产生的陷阱 陷阱11 动态加载用户控件的陷阱 陷阱12 JavaScript设置服务器控件值 陷阱13 放置隐藏字段的陷阱 陷阱14 动态加载设置输出缓存的用户控件 陷阱15 为删除按钮添加删除确认对话框 陷阱16 页面在客户端转向的陷阱 陷阱17 Web Service方法重载产生的陷阱 陷阱18 编写JavaScript代码时的空格陷阱 陷阱19 使用可空符号??运算 陷阱20 获取错误信息并到指定页面 陷阱21 使用LINQ的First方法 陷阱22 文件格式与文件读取的陷阱 陷阱23 读写二进制文件的陷阱 陷阱24 母版页使用img标签 陷阱25 页面缓存产生的陷阱 陷阱26 使用查询字符串在页面间传递参数 陷阱27 通用数据类型运算产生的陷阱 陷阱28 在模态窗口下载文件 陷阱29 构造方法调用虚方法的陷阱 陷阱30 使用值类型进行线程同步 第4章 开发人员意识的20个常见谬误 谬误01 所有的异常都要使用try…catch语句捕获 谬误02 Web控件的Enabled功能等价于HTML控件的 disabled属性 谬误03 将Session设置为空就是删除该会话状态 谬误04 RegisterStartupScript方法不能向页面输出文本 谬误05 数据绑定表达式会自动计算它的值 谬误06 事件和委托的差别很大 谬误07 Visual C# 8具有的特征Visual Basic 8都具有 谬误08 .NET的应用程序域和操作系统的进程完全相同 谬误09 C#没有全局变量 谬误10 .NET和SQL Server“空值”是一回事 谬误11 C#的结构和C++的完全一样 谬误12 方法只有引用类型的参数才能实现引用传递 谬误13 字符串是值类型 谬误14 数据绑定表达式Eval功能等价于Bind 谬误15 .Net的数组类型和C++的数组没有区别 谬误16 泛型不被指定的情况下是不确定的类型 谬误17 Object类型比较方法上的一些误解 谬误18 .NET的线程等价于Win32线程 谬误19 TextBox控件依靠ViewState保存状态数据 谬误20 必须在页面添加元素才能使用CSS文件的样式 第3篇 技术细节篇 第5章 必知必会的40个C#语言方面的技术细节 细节01 给C#代码加注释的意义 细节02 装箱和拆箱 细节03 理解值类型和引用类型 细节04 隐式转换和显式转换 细节05 前缀方式增1和减1运算符 细节06 理解移位运算符 细节07 理解运算的次序 细节08 理解参数的类型 细节09 重载方法 细节10 虚方法与重写方法 细节11 结构和类的区别 细节12 什么是封装 细节13 什么是继承 细节14 什么是多态性 细节15 作用域的概念 细节16 使用索引器 细节17 base和this关键字 细节18 理解静态修饰符 细节19 .Net的object类 细节20 细说可空类型 细节21 分部类 细节22 匿名方法 细节23 .Net框架提供的属性(Attribute) 细节24 自定义属性类(Attribute) 细节25 泛型 细节26 包含/委托 细节27 实现迭代器 细节28 压缩和解压缩流的方法 细节29 C#的深复制和浅复制 细节30 全角字符转换为半角 细节31 分析路径字符串函数总结 细节32 重载一元、二元运算符 细节33 对象也能排序 细节34 实现IDisposable接口清除对象 细节35 将字符串转为字符数组 细节36 将字符数组写入到字符串 细节37 使用var创建隐型局部变量 细节38 Lambda表达式 细节39 生成缩略图的方法 细节40 使用缓冲流 …… 第6章 必知必会的28个ADO.NET、XML及LINQ方面的技术细节 第7章 必知必会的22个Web方面的技术细节 第4篇 开发技巧篇 第8章 必知必会的30个语言方面的经验技巧 第9章 必知必会的15个ADO及XML方面的经验技巧 第10章 必知必会的40个LINQ方面的经验技巧 第11章 必知必会的65个Web方面的经验技巧 第5篇 算法和效率篇 第12章 常用的20个算法及应用 第6篇 解决方案篇 第13章 项目经常用到的20个解决方案
再次声明 千万不要把XiaoQi.dll 跟 XiaoQi.XML 给分开 添加的时候 一定要引用 不要直接复制DLL 不然没有方法注释 有最新最实用的方法 联系小柒 下面是 AspNetHelp 类 方法概述 ///Show()弹出对话框 ///重载Show()弹出对话框 并且跳转界面 ///ShowJavascript()执行javascript脚本 ///FileDelete()给出文件虚拟路径删除文件 ///FileSize()获取上传文件大小 ///FileUpload()文件上传 路径upload/ 自动重命名 ///FileDownload()文件下载 调用方法如 FileDownload(Response,Server,文件虚拟路径) ///FileTxtWrite()写入TXT文本 给出要创建Txt 文本的地址 ///FileTxtReader()读取TXT文本 Txt 文本的地址 返回一个数组 每一行为数组里的一个元素 ///StringEncrypt() DES字符串加密文不可以加密 ///StringDecrypt()DES解密字符串 ///StringMD5Encrypt()MD5加密 ///StringPYChar()单个汉字返回该汉字首字母 ///StringRandom()生成指定位数的随机数 ///StringEdit()给出指定字符串长度多少位后用点显示... ///StringReplaceSpace()替换文本的空格和换行 ///StringColor()改变字的颜色 ///StringNull()当对象是空的时候 转为空字符串 ///StringConvert()汉字转拼音 ///StringNumber()数字转换文 ///StringRep()url参数为文时候转换加密 ///StringRes()url参数为文时候转换解密 ///ShowWindowForm()弹出新窗口页面 ///ShowFormModalDialog()弹出模式窗口页面 ///SqlGetMaxID()给出表名列名 int类型 查询出最大列值+1 适用于主键 ///SqlGetSingle()执行一条计算查询结果语句,返回查询结果(object)。 ///SqlExecute()执行SQL语句,返回影响的记录数 ///SqlRunStr()执行SQL语句,不返回影响的记录数 ///SqlRunReturn()执行SQL语句,并返回第一行第一列结果 ///SqlGetReader()获得SqlDataReader对象 使用完须关闭DataReader,关闭数据库连接 ///SqlGetTable()执行查询语句,返回DataTable ///SqlDataSet()执行查询语句,返回DataSet ///SqlIsCunZai()执行Sql 语句查询是否有数据 如果没有返回假 ///SqlRunProc()执行存储过程 ///DataBindDropDownListDefault()DropDownList控件绑定 带默认选择项 如"请选择" ///DataBindDropDownList()DropDownList控件绑定 不带默认选择项 ///DataBindRadioButtonList()RadioButtonList控件绑定 默认第一个选 ///DataBindCheckBoxList()CheckBoxList控件绑定 ///ElseIpAddr()调用此方法 返回当前登录的省市IP地址 ///ElseDataTimeIng()返回本地电脑的当前日期的年月日时分秒 动态的显示 JS实现 ///ElsePageLoad()页面加载数据加载完成呈现页面 ///ElseCkeck()返回页面验证码图片 使用方法:单独创建一个页面 在首次加载事件里写 AspNetHelp.ElseCkeck(Page); 在使用验证码的页面直接写 img src="这个页面的路径" 注意验证码保存在 Session["CheckCode"] 这里是区分大小写的 ///ElseColorRGB()由于QQ截图的取色会出现RGB的颜色 这里能转换成16进制

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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