Vb.net向sql server数据库中保存图片(一)

Vb.net 向 sql server 数据库中保存图片

袁志

预备知识: STREAM 、 ADO.NET

微软的 SQL SERVER 数据库的 Image 、 text 等字段都属于二进制的大对象。这些对象的存取和其他轻型对象略有不同。比如,我们打开一个数据表的时候,普通类型的字段都可以看见,而 Image 类型的字段却不行,只能通过编程的方法来读取。这篇资料就是介绍怎样用 vb.NET 来向 sql server 数据库中存放图片,怎样从数据库中取出图片浏览。我在这里也费了老大的精力,主要是为了答复一个同学的提问。(他刨根问底式的学习方式,把我急出一身冷汗,惭愧。。。。。。)

这个例程用到了 sql server 自带的 northwind 数据库,其中 employees (职员)数据表有一个字段“ photo ”,是用来存放照片的,里面有 9 条记录,我费了半天力气,想去看看那 9 个人图片,就是看不见。现在猜测,这些人的 photo 根本就是空的。所以,我决定添加一些新的记录。

在这个例程里,我实现了一个简单的 WinForm 程序,这个程序通过点击“ Open ”按钮选择一个图片文件( bmp 或 jpg ),并显示在图形控件 PictureBox 中。通过“ Save ”按钮存入数据库。点击“ View ” CheckBox 可以切换到浏览状态,观看存入数据库的图片。

微软 .NET Framework 的 System.IO 命名空间下给我们提供了一个 FileStream 文件流类。我们可以使用这个文件流对二进制大对象轻松进行读写。由于对二进制大对象使用的流操作,所以对于任何文件都具有通用性。读写文本文件也可以这么做。

步骤:

1、 先来看一下 northwind 数据库中 employees 表结构

2、 知道 .net 连接 sql server 的方法嘛,不知道的话,看看我写的“ ado.net 中的 connection 对象”吧。读懂下面这几句没问题吧:

Dim conn as new sqlconnection( “ server=localhost;database=northwind;Integrated Security=true; ”

Dim sqlcomm As New SqlCommand

sqlcomm.Connection = conn

sqlcomm.CommandText = "INSERT INTO employees (lastname,firstname,photo) VALUES (@lastname,@firstname,@photo)"

Dim prm1 As New SqlParameter("@lastname", txtLN.Text)

Dim prm2 As New SqlParameter("@firstname", txtFN.Text)

Dim prm3 As New SqlParameter("@photo", SqlDbType.VarBinary, Int(fs.Length), _ ParameterDirection.Input, False , 0, 0, "", DataRowVersion.Current, Data)

sqlcomm.Parameters.Add(prm1)

sqlcomm.Parameters.Add(prm2)

sqlcomm.Parameters.Add(prm3)

3 、新建一个 windows 应用程序窗体,界面如下:(图1)

其中:有一个 checkBox:checkBox1,

有两个 textBox : txtLN,txtFN,

有四个 lebel, 其中一个没有文字的 lblPhoto( 用来存放 photo 文件位置 ),

四个 button:btnBack, btnForward, btnOpen, btnSave

4、 进入到代码设计部分,首先声明应用的名称空间:

Imports System

Imports System.Drawing

Imports System.Collections

Imports System.ComponentModel

Imports System.Windows.Forms

Imports System.Data

Imports System.Drawing.Imaging

Imports System.IO

Imports System.Data.SqlClient

好像多了一点哈,不过反正没毒。

(2)

Published At
Categories with Web编程
Tagged with
comments powered by Disqus