如何将图像名称插入数据库?

时间:2009-04-18 21:17:55

标签: sql-server vb.net image

我成功上传并成像并调整大小。现在我想将我的图像名称插入数据库。

我正在使用SQL Server。该表名为images,有两列,整数imageidimagenamestring(invarchar(max))。我需要保存在imagename列中的文件名,imageid必须是标识。

这是我到目前为止的代码:

Imports System.Drawing
Imports System.Drawing.Drawing2D
Imports System.Drawing.Imaging
Imports System.IO
Imports System.Data.SqlClient
Imports System.Data
Partial Class _Default
    Inherits System.Web.UI.Page

    Protected Sub btnupload_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnupload.Click
        Response.Write("Done")
        If (IsPostBack) Then
            HandleUploadedFile()
        End If
    End Sub
    Private Sub HandleUploadedFile()
        ' get the root of the web site 
        Dim root As String = Server.MapPath("~/")

        ' clean up the path 
        If Not root.EndsWith("\") Then
            root += "\"
        End If

        ' make a folder to store the images in 
        Dim fileDirectory As String = root & "Images/"

        ' create the folder if it does not exist 
        If Not System.IO.Directory.Exists(fileDirectory) Then
            System.IO.Directory.CreateDirectory(fileDirectory)
        End If

        ' make a link to the new file 
        Dim link As String = "<a href='Images/{0}' target='_blank'>{1}</a>{2}{3}"

        ' loop through the file in the request 
        For i As Integer = 0 To Request.Files.Count - 1

            ' get the file instance 
            Dim fi As HttpPostedFile = Request.Files.[Get](i)

            ' create a byte array to store the file bytes 
            Dim fileBytes As Byte() = New Byte(fi.ContentLength - 1) {}

            ' fill the byte array 
            Using stream As System.IO.Stream = fi.InputStream
                stream.Read(fileBytes, 0, fi.ContentLength)
            End Using

            ' create a random file name 
            Dim fileName As String = Guid.NewGuid().ToString()

            ' write the original file to the file system 
            File.WriteAllBytes(fileDirectory + fileName & ".jpg", fileBytes)
            litText.Text += String.Format(link, fileName & ".jpg", fileName & " Original", "<br/>", "")

            ' write the resized file to the file system 
            File.WriteAllBytes(fileDirectory + fileName & "_small.jpg", ResizeImageFile(fileBytes, 100))
            litText.Text += String.Format(link, fileName & "_small.jpg", fileName & " Small", "<br/>", "<br/>")

            ' cleanup 
            litText.Visible = True
            fileBytes = Nothing
        Next
    End Sub
    Private Shared Function ResizeImageFile(ByVal imageFile As Byte(), ByVal targetSize As Integer) As Byte()
        Using oldImage As System.Drawing.Image = System.Drawing.Image.FromStream(New MemoryStream(imageFile))
            Dim newSize As Size = CalculateDimensions(oldImage.Size, targetSize)
            Using newImage As New Bitmap(newSize.Width, newSize.Height, PixelFormat.Format24bppRgb)
                Using canvas As Graphics = Graphics.FromImage(newImage)
                    canvas.SmoothingMode = SmoothingMode.AntiAlias
                    canvas.InterpolationMode = InterpolationMode.HighQualityBicubic
                    canvas.PixelOffsetMode = PixelOffsetMode.HighQuality
                    canvas.DrawImage(oldImage, New Rectangle(New Point(0, 0), newSize))
                    Dim m As New MemoryStream()
                    newImage.Save(m, ImageFormat.Jpeg)
                    Return m.GetBuffer()
                End Using
            End Using
        End Using
    End Function
    Private Shared Function CalculateDimensions(ByVal oldSize As Size, ByVal targetSize As Integer) As Size
        Dim newSize As New Size()
        If oldSize.Height > oldSize.Width Then
            newSize.Width = CInt((oldSize.Width * (CSng(targetSize) / CSng(oldSize.Height))))
            newSize.Height = targetSize
        Else
            newSize.Width = targetSize
            newSize.Height = CInt((oldSize.Height * (CSng(targetSize) / CSng(oldSize.Width))))
        End If
        Return newSize
    End Function
End Class

1 个答案:

答案 0 :(得分:1)

首先,您需要知道您的连接字符串。由于代码引用了SQLClient,我假设您使用的是SQL Server,因此您应该查看here。接下来,您将要使用SQLCommand对象的ExecuteNonQuery方法。我在下面贴了一个样本。您可以阅读有关SQLCommand对象here的更多信息。这个site涵盖了插入语句。

Public Sub SaveNameInDatabase(ByVal fileName As String, ByVal connectionString As String)
    Using connection As New SqlConnection(connectionString)
String query = String.format("INSERT INTO Files_Table (FileName) Values (\"{0}\")",fileName)
        Dim command As New SqlCommand(, connection)
        command.Connection.Open()
        command.ExecuteNonQuery()
    End Using
End Sub