Asp.net 在数据库中上载文件两次

Asp.net 在数据库中上载文件两次,asp.net,sql,Asp.net,Sql,我使用ASP.net程序和SQL数据库 我想把各种文件上传到数据库 我用这段代码实现了这一点,但它确实在数据库中上传了两次文件 Imports System.Data Imports System.Data.SqlClient Imports System.IO Partial Class Document Inherits System.Web.UI.Page Public Function InsertUpdateData(ByVal cmd As SqlCommand)

我使用ASP.net程序和SQL数据库

我想把各种文件上传到数据库

我用这段代码实现了这一点,但它确实在数据库中上传了两次文件

Imports System.Data
Imports System.Data.SqlClient
Imports System.IO
Partial Class Document
    Inherits System.Web.UI.Page

    Public Function InsertUpdateData(ByVal cmd As SqlCommand) As Boolean
        'Dim strConnString As String = System.Configuration.ConfigurationManager.ConnectionStrings("conString").ConnectionString
        Dim con As New SqlConnection("Data Source=SON\SQLDB;Initial Catalog=myDB;Integrated Security=True")
        cmd.CommandType = CommandType.Text
        cmd.Connection = con
        Try
            con.Open()
            cmd.ExecuteNonQuery()
            Return True
        Catch ex As Exception
            Response.Write(ex.Message)
            Return False
        Finally
            con.Close()
            con.Dispose()
        End Try
    End Function

    Protected Sub btnUpload_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnUpload.Click
        ' Read the file and convert it to Byte Array 
        Dim filePath As String = FileUpload1.PostedFile.FileName
        Dim filename As String = Path.GetFileName(filePath)
        Dim ext As String = Path.GetExtension(filename)
        Dim contenttype As String = String.Empty

        'Set the contenttype based on File Extension
        Select Case ext
            Case ".doc"
                contenttype = "application/vnd.ms-word"
                Exit Select
            Case ".docx"
                contenttype = "application/vnd.ms-word"
                Exit Select
            Case ".xls"
                contenttype = "application/vnd.ms-excel"
                Exit Select
            Case ".xlsx"
                contenttype = "application/vnd.ms-excel"
                Exit Select
            Case ".jpg"
                contenttype = "image/jpg"
                Exit Select
            Case ".png"
                contenttype = "image/png"
                Exit Select
            Case ".gif"
                contenttype = "image/gif"
                Exit Select
            Case ".pdf"
                contenttype = "application/pdf"
                Exit Select
        End Select
        If contenttype <> String.Empty Then
            Dim fs As Stream = FileUpload1.PostedFile.InputStream
            Dim br As New BinaryReader(fs)
            Dim bytes As Byte() = br.ReadBytes(fs.Length)

            'insert the file into database 
            Dim strQuery As String = "insert into ArchivedFile" _
            & "(Name, contenttype, Data )" _
            & " values (@Name, @ContentType, @Data)"
            Dim cmd As New SqlCommand(strQuery)
            cmd.Parameters.Add("@Name", SqlDbType.VarChar).Value = filename
            cmd.Parameters.Add("@ContentType", SqlDbType.VarChar).Value _
            = contenttype
            cmd.Parameters.Add("@Data", SqlDbType.Binary).Value = bytes
            InsertUpdateData(cmd)
            lblMessage.ForeColor = System.Drawing.Color.Green
            lblMessage.Text = "File Uploaded Successfully"
        Else
            lblMessage.ForeColor = System.Drawing.Color.Red
            lblMessage.Text = "File format not recognised." _
            & " Upload Image/Word/PDF/Excel formats"
        End If
    End Sub
End Class 
导入系统数据
导入System.Data.SqlClient
导入System.IO
部分类文档
继承System.Web.UI.Page
作为布尔值的公共函数InsertUpdateData(ByVal cmd作为SqlCommand)
'Dim strConnString As String=System.Configuration.ConfigurationManager.ConnectionStrings(“conString”).ConnectionString
Dim con作为新的SqlConnection(“数据源=SON\SQLDB;初始目录=myDB;集成安全性=True”)
cmd.CommandType=CommandType.Text
cmd.Connection=con
尝试
con.Open()
cmd.ExecuteNonQuery()
返回真值
特例
响应。写入(例如消息)
返回错误
最后
con.Close()
con.Dispose()
结束尝试
端函数
受保护的子btnUpload_Click(ByVal sender作为对象,ByVal e作为System.EventArgs)处理btnUpload。单击
'读取文件并将其转换为字节数组
Dim filePath作为字符串=FileUpload1.PostedFile.FileName
Dim文件名为String=Path.GetFileName(filePath)
Dim ext As String=Path.GetExtension(文件名)
Dim contenttype为String=String.Empty
'根据文件扩展名设置contenttype
选择案例分机
案例“.doc”
contenttype=“应用程序/vnd.ms word”
退出选择
案例“.docx”
contenttype=“应用程序/vnd.ms word”
退出选择
案例“.xls”
contenttype=“应用程序/vnd.ms excel”
退出选择
案例“.xlsx”
contenttype=“应用程序/vnd.ms excel”
退出选择
案例“.jpg”
contenttype=“image/jpg”
退出选择
大小写“.png”
contenttype=“image/png”
退出选择
大小写“.gif”
contenttype=“image/gif”
退出选择
案例“.pdf”
contenttype=“应用程序/pdf”
退出选择
结束选择
如果contenttype为String.Empty,则
Dim fs As Stream=FileUpload1.PostedFile.InputStream
Dim br作为新的二进制读取器(fs)
作为字节()的Dim字节=br.ReadBytes(fs.Length)
'将文件插入数据库
Dim strQuery As String=“插入到存档文件”_
&(名称、内容类型、数据)_
&值(@Name、@ContentType、@Data)
Dim cmd作为新的SqlCommand(strQuery)
cmd.Parameters.Add(“@Name”,SqlDbType.VarChar).Value=filename
cmd.Parameters.Add(“@ContentType”,SqlDbType.VarChar).Value_
=内容类型
cmd.Parameters.Add(“@Data”,SqlDbType.Binary).Value=bytes
插入更新数据(cmd)
lblMessage.ForeColor=System.Drawing.Color.Green
lblMessage.Text=“文件已成功上载”
其他的
lblMessage.ForeColor=System.Drawing.Color.Red
lblMessage.Text=“无法识别文件格式。”_
&“上载图像/Word/PDF/Excel格式”
如果结束
端接头
末级
我不知道确切的问题是什么。

我希望有人能帮助我。

您将代码附加到一个按钮上-有人双击按钮吗?

我要做的第一件事是确定您的代码的哪个部分运行了两次。使用调试和断点确定运行
Sub-btnUpload\u Click
的次数,调用
函数InsertUpdateData
的次数等

另外,从您的问题的上下文来看,我推测在您测试时,双重插入正在发生,而不仅仅是在生产中。准确吗

如果这不能直接引导您找到问题的原因,请使用结果更新您的问题,以便我们进一步检查


我的怀疑是,
btnUpload\u Click
出于某种原因触发了两次,如果是这样,请发布按钮的标记,无论它是否包含在
UpdatePanel
中,以及任何可能适用的客户端脚本。

我尝试了好几次,以确保我单击了一次,并且在两个事件处理程序与同一事件关联的情况下发生了一次。i、 e.复制代码…我尝试使用断点,但在子btnUpload\u单击的第行遇到了未处理的参数null异常。我不知道问题出在何处。OK,令人困惑的是,如果存在未处理的异常,代码如何执行?