ODBC存储二进制流至SQL Server

时间:2022-09-24 14:57:52
我现在已经能将一个二进制文件存入数据库。
INSERT INTO TestTable(Picture) VALUES(select * from openrowset(bulk 'E:/1.jpg', SINGLE_BLOB) as data)


但还不知道如何把内存中的二进制流(buffer)直接存入数据库,求详细代码,谢谢!

“CDatabase、CRecordset、SQL Server 2016”

12 个解决方案

#1


用程序把图片变成二进制字节存到数据库中,取出来之后再用程序还原成图片

#2


引用 1 楼 sinat_28984567 的回复:
用程序把图片变成二进制字节存到数据库中,取出来之后再用程序还原成图片

答非所问

#3


引用 2 楼 TiLongZS 的回复:
Quote: 引用 1 楼 sinat_28984567 的回复:

用程序把图片变成二进制字节存到数据库中,取出来之后再用程序还原成图片

答非所问
好吧,看错了。
能用程序把内存中的二进制流取出来吗?

#4


引用 3 楼 sinat_28984567 的回复:
Quote: 引用 2 楼 TiLongZS 的回复:

Quote: 引用 1 楼 sinat_28984567 的回复:

用程序把图片变成二进制字节存到数据库中,取出来之后再用程序还原成图片

答非所问
好吧,看错了。
能用程序把内存中的二进制流取出来吗?

能啊。打个比方,现在就有一块内存:byte[10]。要存入TestTable表中,“Picture varbinary(MAX)”字段。怎么存?总不能每次都将这块内存保存为本地文件,然后再用我一楼的方法存入数据库啊。

#5


引用 4 楼 TiLongZS 的回复:
Quote: 引用 3 楼 sinat_28984567 的回复:

Quote: 引用 2 楼 TiLongZS 的回复:

Quote: 引用 1 楼 sinat_28984567 的回复:

用程序把图片变成二进制字节存到数据库中,取出来之后再用程序还原成图片

答非所问
好吧,看错了。
能用程序把内存中的二进制流取出来吗?

能啊。打个比方,现在就有一块内存:byte[10]。要存入TestTable表中,“Picture varbinary(MAX)”字段。怎么存?总不能每次都将这块内存保存为本地文件,然后再用我一楼的方法存入数据库啊。


得到二进制流了直接就用 INSERT INTO TestTable(Picture) VALUES(二进制流字符串);存到数据库就行了,不用保存为本地文件

#6


引用 5 楼 sinat_28984567 的回复:
Quote: 引用 4 楼 TiLongZS 的回复:

Quote: 引用 3 楼 sinat_28984567 的回复:

Quote: 引用 2 楼 TiLongZS 的回复:

Quote: 引用 1 楼 sinat_28984567 的回复:

用程序把图片变成二进制字节存到数据库中,取出来之后再用程序还原成图片

答非所问
好吧,看错了。
能用程序把内存中的二进制流取出来吗?

能啊。打个比方,现在就有一块内存:byte[10]。要存入TestTable表中,“Picture varbinary(MAX)”字段。怎么存?总不能每次都将这块内存保存为本地文件,然后再用我一楼的方法存入数据库啊。


得到二进制流了直接就用 INSERT INTO TestTable(Picture) VALUES(二进制流字符串);存到数据库就行了,不用保存为本地文件

二进制流字符串是什么意思?还是刚才说的byte buffer[10]内存,SQL语句该如何写?毕竟直接 INSERT INTO TestTable(Picture) VALUES(buffer)也不行啊。

#7


引用 6 楼 TiLongZS 的回复:
Quote: 引用 5 楼 sinat_28984567 的回复:

Quote: 引用 4 楼 TiLongZS 的回复:

Quote: 引用 3 楼 sinat_28984567 的回复:

Quote: 引用 2 楼 TiLongZS 的回复:

Quote: 引用 1 楼 sinat_28984567 的回复:

用程序把图片变成二进制字节存到数据库中,取出来之后再用程序还原成图片

答非所问
好吧,看错了。
能用程序把内存中的二进制流取出来吗?

能啊。打个比方,现在就有一块内存:byte[10]。要存入TestTable表中,“Picture varbinary(MAX)”字段。怎么存?总不能每次都将这块内存保存为本地文件,然后再用我一楼的方法存入数据库啊。


得到二进制流了直接就用 INSERT INTO TestTable(Picture) VALUES(二进制流字符串);存到数据库就行了,不用保存为本地文件

二进制流字符串是什么意思?还是刚才说的byte buffer[10]内存,SQL语句该如何写?毕竟直接 INSERT INTO TestTable(Picture) VALUES(buffer)也不行啊。


就是把bytes用程序取出来,转变成字符串存到数据库

#9


引用 8 楼 sinat_28984567 的回复:
类似这个里说的
http://blog.csdn.net/daxingshen/article/details/50541056

有点麻烦,否则我直接用base64就得了。

#10


引用 9 楼 TiLongZS 的回复:
Quote: 引用 8 楼 sinat_28984567 的回复:

类似这个里说的
http://blog.csdn.net/daxingshen/article/details/50541056

有点麻烦,否则我直接用base64就得了。

和INSERT INTO TestTable(Picture) VALUES(select * from openrowset(bulk 'E:/1.jpg', SINGLE_BLOB) as data)这个差不多,这个也有转换的过程。因为内存里已经有二进制流了,只不过是取出来换成字符串后执行INSERT INTO TestTable(Picture) VALUES();

#11


顶一下,期待有其他的解决方案

#12


上班来顶一下,期待有其他的解决方案

#1


用程序把图片变成二进制字节存到数据库中,取出来之后再用程序还原成图片

#2


引用 1 楼 sinat_28984567 的回复:
用程序把图片变成二进制字节存到数据库中,取出来之后再用程序还原成图片

答非所问

#3


引用 2 楼 TiLongZS 的回复:
Quote: 引用 1 楼 sinat_28984567 的回复:

用程序把图片变成二进制字节存到数据库中,取出来之后再用程序还原成图片

答非所问
好吧,看错了。
能用程序把内存中的二进制流取出来吗?

#4


引用 3 楼 sinat_28984567 的回复:
Quote: 引用 2 楼 TiLongZS 的回复:

Quote: 引用 1 楼 sinat_28984567 的回复:

用程序把图片变成二进制字节存到数据库中,取出来之后再用程序还原成图片

答非所问
好吧,看错了。
能用程序把内存中的二进制流取出来吗?

能啊。打个比方,现在就有一块内存:byte[10]。要存入TestTable表中,“Picture varbinary(MAX)”字段。怎么存?总不能每次都将这块内存保存为本地文件,然后再用我一楼的方法存入数据库啊。

#5


引用 4 楼 TiLongZS 的回复:
Quote: 引用 3 楼 sinat_28984567 的回复:

Quote: 引用 2 楼 TiLongZS 的回复:

Quote: 引用 1 楼 sinat_28984567 的回复:

用程序把图片变成二进制字节存到数据库中,取出来之后再用程序还原成图片

答非所问
好吧,看错了。
能用程序把内存中的二进制流取出来吗?

能啊。打个比方,现在就有一块内存:byte[10]。要存入TestTable表中,“Picture varbinary(MAX)”字段。怎么存?总不能每次都将这块内存保存为本地文件,然后再用我一楼的方法存入数据库啊。


得到二进制流了直接就用 INSERT INTO TestTable(Picture) VALUES(二进制流字符串);存到数据库就行了,不用保存为本地文件

#6


引用 5 楼 sinat_28984567 的回复:
Quote: 引用 4 楼 TiLongZS 的回复:

Quote: 引用 3 楼 sinat_28984567 的回复:

Quote: 引用 2 楼 TiLongZS 的回复:

Quote: 引用 1 楼 sinat_28984567 的回复:

用程序把图片变成二进制字节存到数据库中,取出来之后再用程序还原成图片

答非所问
好吧,看错了。
能用程序把内存中的二进制流取出来吗?

能啊。打个比方,现在就有一块内存:byte[10]。要存入TestTable表中,“Picture varbinary(MAX)”字段。怎么存?总不能每次都将这块内存保存为本地文件,然后再用我一楼的方法存入数据库啊。


得到二进制流了直接就用 INSERT INTO TestTable(Picture) VALUES(二进制流字符串);存到数据库就行了,不用保存为本地文件

二进制流字符串是什么意思?还是刚才说的byte buffer[10]内存,SQL语句该如何写?毕竟直接 INSERT INTO TestTable(Picture) VALUES(buffer)也不行啊。

#7


引用 6 楼 TiLongZS 的回复:
Quote: 引用 5 楼 sinat_28984567 的回复:

Quote: 引用 4 楼 TiLongZS 的回复:

Quote: 引用 3 楼 sinat_28984567 的回复:

Quote: 引用 2 楼 TiLongZS 的回复:

Quote: 引用 1 楼 sinat_28984567 的回复:

用程序把图片变成二进制字节存到数据库中,取出来之后再用程序还原成图片

答非所问
好吧,看错了。
能用程序把内存中的二进制流取出来吗?

能啊。打个比方,现在就有一块内存:byte[10]。要存入TestTable表中,“Picture varbinary(MAX)”字段。怎么存?总不能每次都将这块内存保存为本地文件,然后再用我一楼的方法存入数据库啊。


得到二进制流了直接就用 INSERT INTO TestTable(Picture) VALUES(二进制流字符串);存到数据库就行了,不用保存为本地文件

二进制流字符串是什么意思?还是刚才说的byte buffer[10]内存,SQL语句该如何写?毕竟直接 INSERT INTO TestTable(Picture) VALUES(buffer)也不行啊。


就是把bytes用程序取出来,转变成字符串存到数据库

#8


#9


引用 8 楼 sinat_28984567 的回复:
类似这个里说的
http://blog.csdn.net/daxingshen/article/details/50541056

有点麻烦,否则我直接用base64就得了。

#10


引用 9 楼 TiLongZS 的回复:
Quote: 引用 8 楼 sinat_28984567 的回复:

类似这个里说的
http://blog.csdn.net/daxingshen/article/details/50541056

有点麻烦,否则我直接用base64就得了。

和INSERT INTO TestTable(Picture) VALUES(select * from openrowset(bulk 'E:/1.jpg', SINGLE_BLOB) as data)这个差不多,这个也有转换的过程。因为内存里已经有二进制流了,只不过是取出来换成字符串后执行INSERT INTO TestTable(Picture) VALUES();

#11


顶一下,期待有其他的解决方案

#12


上班来顶一下,期待有其他的解决方案