分享

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

 趋明 2012-02-16
SQL SERVER数据库的Image字段来存储图片。对图片读取采用二进制和FileStream文件流。其中还要用到数据库的存储过程来插入和读取图片信息记录的内容。数据库中的图片可以另存在硬盘上。支持常见的几个格式

先看一下程序界面:

 

 

SQL存储过程:

CREATE PROCEDURE AddAndUpdateImg
@ImgID int,
@ImgName nvarchar(255),
@ImgDes nvarchar(1000),
@ImgExtName nvarchar(10),
@ImgTypeID int,
@UpdateTime smalldatetime,
@ImgBinary image
As
If Exists (Select 1 From ImgTB Where ImgID=@ImgID)
Begin
Update [ImgTB] Set ImgName=@ImgName,ImgDes=@ImgDes,ImgExtName=@ImgExtName,ImgTypeID=@ImgTypeID,UpdateTime=@UpdateTime,ImgBinary=@ImgBinary Where ImgID=@ImgID
Select @@RowCount
End
Else
Begin

Declare @NewID smallint
set @NewID=0
Select @NewID=IsNull(Max([ImgID]),0)+1 From [ImgTB]
INSERT INTO [ImgTB] (ImgID,ImgName,ImgDes,ImgExtName,ImgTypeID,UpdateTime,ImgBinary) Values (@ImgID,@ImgName,@ImgDes,@ImgExtName,@ImgTypeID,@UpdateTime,@ImgBinary)
Select @NewID
End
操作这个存储过程的一个VB.Net的函数:

  1. Function AddAndUpdateImg() As Boolean
  2.         Dim fs As FileStream
  3.         Try
  4.             SqlConn = New SqlConnection(SQLClass.ConnectString)
  5.             SqlComm = New SqlCommand
  6.             SqlComm.Connection = SqlConn
  7.             SqlComm.CommandType = CommandType.StoredProcedure
  8.             SqlComm.CommandText = "AddAndUpdateImg"
  9.             pr = New SqlParameter("@ImgID", SqlDbType.Int)
  10.             pr.Value = CInt(Me.TxtBoxImgID.Text)
  11.             SqlComm.Parameters.Add(pr)
  12.             pr = New SqlParameter("@ImgName", SqlDbType.NVarChar, 255)
  13.             pr.Value = Me.TxtBoxImgName.Text
  14.             SqlComm.Parameters.Add(pr)
  15.             pr = New SqlParameter("@ImgDes", SqlDbType.NVarChar, 1000)
  16.             If Me.TxtBoxImgDes.Text > "" Then
  17.                 pr.Value = Me.TxtBoxImgDes.Text
  18.             Else
  19.                 pr.Value = ""
  20.             End If
  21.             SqlComm.Parameters.Add(pr)
  22.             pr = New SqlParameter("@ImgExtName", SqlDbType.NVarChar, 10)
  23.             If Me.TxtBoxImgExtName.Text > "" Then
  24.                 pr.Value = Me.TxtBoxImgExtName.Text
  25.             Else
  26.                 pr.Value = ""
  27.             End If
  28.             SqlComm.Parameters.Add(pr)
  29.             pr = New SqlParameter("@ImgTypeID", SqlDbType.Int)
  30.             If Me.TxtBoxImgTypeID.Text > "" Then pr.Value = CInt(Me.TxtBoxImgTypeID.Text)
  31.             SqlComm.Parameters.Add(pr)
  32.             pr = New SqlParameter("@UpdateTime", SqlDbType.SmallDateTime)
  33.             pr.Value = Me.TImgUpdateTime.Value
  34.             SqlComm.Parameters.Add(pr)
  35.             pr = New SqlParameter("@ImgBinary", SqlDbType.Image)
  36.             If ImgPath > "" Then
  37.                 fs = New FileStream(ImgPath, FileMode.Open)
  38.                 Dim bt(fs.Length) As Byte
  39.                 fs.Read(bt, 0, fs.Length)
  40.                 pr.Value = bt
  41.             Else
  42.                 If Me.ImgBox.Image IsNot Nothing Then
  43.                     Me.ImgBox.Image.Save(fs, Me.ImgBox.Image.RawFormat)
  44.                     Dim bt(fs.Length) As Byte
  45.                     fs.Read(bt, 0, fs.Length)
  46.                     pr.Value = bt
  47.                 End If
  48.             End If
  49.             SqlComm.Parameters.Add(pr)
  50.             SqlConn.Open()
  51.             SqlComm.ExecuteNonQuery()
  52.             Try
  53.                 fs.Close()
  54.             Catch ex As Exception
  55.             End Try
  56.             SqlConn.Close()
  57.             SqlConn = Nothing
  58.             Return True
  59.         Catch ex As SqlException
  60.             Dim errItem As SqlError
  61.             Dim errString As String = ""
  62.             For Each errItem In ex.Errors
  63.                 errString += ex.Message + " "
  64.             Next
  65.             MsgBox("SQL错误.详细内容:" & errString)
  66.             Return False
  67.         Catch myException As Exception
  68.             MsgBox("异常描述:" + myException.ToString())
  69.             Return False
  70.         End Try
  71.     End Function

 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多