Jasmine Ответов: 1

Как сохранить пути к изображениям в базе данных access?


кто-нибудь, помогите мне со следующими кодами. они не показывают никаких ошибок, но путь к изображению не отображается в моей базе данных

Что я уже пробовал:

Imports System.Data
Imports System.Data.OleDb
Imports System.IO
Partial Class ADRequest
    Inherits System.Web.UI.Page
    Public con As String = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=C:\Users\Welcome\Documents\Database1.accdb"
    Dim dbcon As New OleDbConnection(con)
    Public ds1 As New DataSet
    Dim sql As String
    Dim Command1 As New OleDbCommand

    Protected Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
        If FileUpload1.FileName = Nothing Then
            MsgBox("Please Upload a File")
            Exit Sub
        End If
        Dim FilePath As String = Server.MapPath("ADs") & "/" & Path.GetFileName(FileUpload1.FileName)
        Label1.Text = FilePath
        Dim IMG As String = "ADs" & "/" & Path.GetFileName(FileUpload1.FileName)
        If IO.File.Exists(FilePath) Then
            MsgBox("File already exists, Choose another name.")
        Else
            FileUpload1.SaveAs(FilePath)
            Label2.Text = Path.GetFileName(FileUpload1.FileName) + "Has been Uploaded."
        End If
        dbcon.Open()
        sql = "INSERT INTO advertisements(time, designnn, paym) values('" & TextBox1.Text & "','" & IMG & "', '" & RadioButtonList1.SelectedValue & "')"
        Dim command1 As New OleDbCommand(sql, dbcon)
        command1.ExecuteNonQuery()
        dbcon.Close()
    End Sub
End Class

Richard Deeming

Вы отметили это как ASP.NET, но вы используете MsgBox Это не сработает - он попытается отобразить сообщение на сервере.

Может быть появиться для работы при отладке кода в Visual Studio. Но это только потому, что сервер и клиент являются одним и тем же компьютером в этом конкретном экземпляре.

Как только вы развернете свой код на реальном сервере, он потерпит неудачу. Если Вам повезет, вы получите исключение, сообщающее вам, что вы не можете отображать пользовательский интерфейс из неинтерактивного процесса. Если нет, то ваш код будет висеть, ожидая, пока кто-то войдет на сервер и нажмет "ОК" на тысячах сообщений.

1 Ответов

Рейтинг:
1

Wendelius

Одна из проблем заключается в том, что вы не используете параметры. Это создает проблемы преобразования и оставляет вас открытым для SQL-инъекций. Видеть SQL-инъекция - Википедия[^]. В зависимости от имени файла (и других входных данных) вы можете оказаться в искаженном SQL.

Другое дело, что вы не проверяете, является ли имя файла пустой строкой. Попробуйте использовать строку.IsNullOrEmpty для теста. Что-то вроде

If string.IsNullOrEmpty(FileUpload1.FileName) Then

Кроме того, вы должны правильно утилизировать объекты и добавить обработку ошибок. Для получения конкретных примеров взгляните на Правильное выполнение операций с базой данных[^]


Jasmine

Не могли бы вы исправить мои коды? Мне очень жаль, что приходится спрашивать вас об этом, но я новичок в программировании, и у меня есть только один день, чтобы исправить эту проблему, которую я на самом деле не понимаю.
Если ты не можешь, я пойму. И все равно спасибо :)

Richard Deeming

Imports System.Data
Imports System.Data.OleDb
Imports System.IO
Imports System.Web

Partial Class ADRequest
    Inherits System.Web.UI.Page
    
    Public con As String = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=C:\Users\Welcome\Documents\Database1.accdb"
    
    Private Sub ShowMessage(ByVal message As String)
        ClientScript.RegisterStartupScript(Me, "Message", "alert(" & HttpUtility.JavaScriptStringEncode(message, True) & ");", True)
    End Sub
    
    Protected Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
        If Not FileUpload1.HasFile OrElse String.IsNullOrEmpty(FileUpload1.FileName) Then
            ShowMessage("Please Upload a File")
            Exit Sub
        End If
        
        Dim Img As String = "ADs/" & Path.GetFileName(FileUpload1.FileName)
        Dim FilePath As String = Server.MapPath(Img)
        Label1.Text = HttpUtility.HtmlEncode(FilePath)
        
        If IO.File.Exists(FilePath) Then
            ShowMessage("File already exists, Choose another name.")
            Exit Sub
        End If
        
        FileUpload1.SaveAs(FilePath)
        Label2.Text = HttpUtility.HtmlEncode(Path.GetFileName(FileUpload1.FileName) + " has been Uploaded.")
        
        Using dbcon As New OleDbConnection(con)
            Using command1 As New OleDbCommand("INSERT INTO advertisements(time, designnn, paym) VALUES (@time, @designnn, @paym)", dbcon)
                command1.Parameters.AddWithValue("@time", TextBox1.Text)
                command1.Parameters.AddWithValue("@designnn", Img)
                command1.Parameters.AddWithValue("@paym", RadioButtonList1.SelectedValue)
                
                dbcon.Open()
                command1.ExecuteNonQuery()
            End Using
        End Using
    End Sub
End Class

Jasmine

Большое вам спасибо, сэр.

Wendelius

Спасибо за помощь!