簡體   English   中英

如何將圖像名稱插入數據庫?

[英]How do I insert an image name into a database?

我成功上傳並成像並調整大小。 現在,我要將圖像的名稱插入數據庫。

我正在使用SQL Server。 該表名為images ,具有兩列,一個整數imageid和一個imagename作為string(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

首先,您需要知道您的連接字符串。 由於代碼引用的是SQLClient,因此我假設您使用的是SQL Server,因此應在此處查看 接下來,您將要使用SQLCommand對象的ExecuteNonQuery方法。 我在下面粘貼了一個示例。 您可以在此處閱讀有關SQLCommand對象的更多信息。 並且此站點涵蓋了Insert語句。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM