搜索
aardio官方社区 门户 查看主题

如何更新SqlServer中Binary类型的字段?

发布者: cxsm | 发布时间: 2014-1-22 14:45| 查看数: 3394| 评论数: 4|帖子模式

SqlServer

表名:txl
字段1 xm  类型  wchar
字段2 photo  类型 Binary
用以下代码可以更新,但是更新的内容不对,再读出来就不是那个图片了,是不是要指定类型?
麻烦大家了


  1. import win.ui;
  2. /*DSG{{*/
  3. var winform = ..win.form(text="aardio Form";right=599;bottom=399)
  4. winform.add(
  5. picturebox={cls="picturebox";left=66;top=46;right=259;bottom=307;z=1}
  6. )
  7. /*}}*/

  8. import com

  9. conn = com.CreateObject("ADODB.Connection")
  10. conn.ConnectionString = "Provider=SQLOLEDB.1;Persist Security Info=False;Data Source=192.168.1.1;Initial Catalog=txl;Persist Security Info=True;User ID=sa;Password=sa";
  11. conn.Open()

  12. rs = com.CreateObject("ADODB.RecordSet")
  13. rs.Open("SELECT photo from txl where xm ='123'", conn,3, 3)

  14. //这儿是不是有问题?
  15. rs(0).AppendChunk(string.load("C:\Documents and Settings\All Users\Documents\My Pictures\示例图片\Winter.jpg"))

  16. rs.update()
  17. rs.close();




  18. winform.show()
  19. win.loopMessage();

复制代码

最新评论

神码 发表于 2014-1-22 15:55:27

提问题尽可能首先整理一个能运行的代码,即能节省别人再现分析问题的时间,也有助于你自己理清问题。 这个问题access与sql server 类似,所以下面

提问题尽可能首先整理一个能运行的代码,即能节省别人再现分析问题的时间,也有助于你自己理清问题。

这个问题access与sql server 类似,所以下面用 access 演示一遍,代码复制就可以跑起来( 我一般不喜欢浪费别人的时间 )。

  1. import access;

  2. //创建数据库
  3. var db = access("/testChunk.mdb")

  4. //创建表
  5. if(!db.existsTable("Chunks") ){
  6.         db.exec("CREATE TABLE Chunks(ID integer identity NOT NULL, Photo IMAGE NULL)")
  7. }

  8. //参数化插入数据
  9. var cmd = db.createCommand( "INSERT INTO Chunks(Photo) VALUES(@Photo)" );  
  10. var bin = string.load( "~\example\图形图像\.gdip.jpg" ); //加载图像
  11. var param1  = cmd.CreateParameter("Photo",205,1 ,#bin) //创建参数
  12. param1.appendChunk( _safearray =  bin  ); //注意图像是safearray
  13. cmd.Parameters.Append(param1); //添加参数
  14. cmd.Execute() //执行命令

  15. import gdip;
  16. for(rs,fields in db.each("SELECT * FROM Chunks") ){
  17.         var size =rs("Photo").ActualSize;//获取图像大小
  18.         var bin = rs("Photo").GetChunk(size); //读取二进制数据
  19.         gdip.graphics( ::GetDC(0) ).drawImage(         gdip.image(bin) ); //画到屏幕上看看
  20.         break;
  21. }
  22.   
  23. //关闭数据库连接
  24. db.close();
复制代码


关键的地方是 param1.appendChunk( 二进制字符串 ); 你要改为 param1.appendChunk( _safearray = 二进制字符串   );
在COM中二进制的数据实际上是一种字节数组,不可直接传字符串,字符串他会理解为纯文本。  
sphawkcn 发表于 2014-1-26 00:55:43

[quote][size=2][url=forum.php?mod=redirect&goto=findpost&pid=64171&ptid=11497][c

神码 发表于 2014-1-22 15:55
提问题尽可能首先整理一个能运行的代码,即能节省别人再现分析问题的时间,也有助于你自己理清问题。

这 ...

看了神码的代码,终于明白怎么从SQL Server数据库中读取二进制文件了,测试成功,特来感谢。
fuluobu 发表于 2015-10-17 06:46:28

[quote][size=2][url=forum.php?mod=redirect&goto=findpost&pid=64171&ptid=11497][c

神码 发表于 2014-1-22 15:55
提问题尽可能首先整理一个能运行的代码,即能节省别人再现分析问题的时间,也有助于你自己理清问题。

这 ...

明白读取二进制文件了
onething 发表于 2016-12-31 07:32:27
学习了,多谢楼上

手机版|未经许可严禁引用或转载本站文章|站长邮箱|aardio.com|aardio官方社区 ( 皖ICP备09012014号 )

GMT+8, 2017-9-25 19:26 , Processed in 0.062500 second(s), 18 queries , WinCache On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表