【问题标题】:How to save uploaded .csv file into SQL Server Management database using asp.net如何使用 asp.net 将上传的 .csv 文件保存到 SQL Server 管理数据库中
【发布时间】:2011-08-11 07:27:47
【问题描述】:

这是我的代码示例。我使用的是 Microsoft Visual Studio 2010,asp.net 版本为 2.0,当用户单击导入按钮时,csv 文件将保存在数据库中。我的代码有错误,不知道如何解决,请帮忙!

protected void btnImport_Click(object sender, EventArgs e)
{
    SqlConnection con = new SqlConnection (@"Data Source=localhost\SQLEXPRESS;Initial Catalog=PSeminar;Integrated Security=true;Trusted_Connection=Yes;MultipleActiveResultSets=true");
    StreamReader Sr = new StreamReader("filepath");

    string line;
    while ((line = Sr.ReadLine()) != null)
    {
        line = Sr.ReadLine();
    }

    const string SQL = "INSERT INTO [Guest] ([GuestName], [IC_Number], [EventName], [GuestID]) VALUES (@GuestName, @IC_Number, @EventName, @GuestID)";
    SqlCommand cmd = new SqlCommand(SQL, con);
    cmd.Parameters.AddWithValue("@GuestName", Sr);
    cmd.Parameters.AddWithValue("@IC_Number", Sr);
    cmd.Parameters.AddWithValue("@EventName", Sr);
    cmd.Parameters.AddWithValue("@GuestID", Sr);

    con.Open();
    cmd.ExecuteNonQuery();// 1,0 will determine whether line is inserted, upload has error...
    con.Close();
}

【问题讨论】:

  • 请帮忙,因为我对这种类型的编码非常陌生,我必须实现它 a.s.a.p :(
  • 您遇到了什么错误?

标签: asp.net sql visual-studio


【解决方案1】:
  1. 您的插入查询必须在您的 while 中
  2. Sr 不是您的参数,而是 line 包含您的数据数组。所以你必须给 AddWithValue 的可能是line[i]
  3. 您在代码中分配 line = Sr.ReadLine() 两次,只需在 while 中执行

所以试试这样的:

protected void btnImport_Click(object sender, EventArgs e)
{
    SqlConnection con = new SqlConnection (@"Data Source=localhost\SQLEXPRESS;Initial Catalog=PSeminar;Integrated Security=true;Trusted_Connection=Yes;MultipleActiveResultSets=true");
    con.Open();

    StreamReader Sr = new StreamReader("filepath");
    string line;
    string SQL = "INSERT INTO [Guest] ([GuestName], [IC_Number], [EventName], [GuestID]) VALUES (@GuestName, @IC_Number, @EventName, @GuestID)";
    while ((line = Sr.ReadLine()) != null)
    {
        SqlCommand cmd = new SqlCommand(SQL, con);

        cmd.Parameters.AddWithValue("@GuestName", line[0]);
        cmd.Parameters.AddWithValue("@IC_Number", line[1]);
        cmd.Parameters.AddWithValue("@EventName", line[2]);
        cmd.Parameters.AddWithValue("@GuestID", line[3]);

        cmd.ExecuteNonQuery();// 1,0 will determine whether line is inserted, upload has error...
    }

    con.Close();
}

【讨论】:

  • 嘿,感谢您发布代码,但是当我在我的项目中实现它时,它给出了这个错误“对象引用未设置为对象的实例。用户代码未处理 NullReferenceException”是什么这表示?对不起我的无知=/
【解决方案2】:

我做过类似的事情,但是我需要导入 xls 文件,但实际上并没有太大区别,这是我使用的代码

受保护的子 ButtonImport_Click(ByVal sender As Object, ByVal e As System.EventArgs) 处理 ButtonImport.Click PanelView.Visible = False PanelUpload.Visible = False PanelImport.Visible = True LabelImport.Text = "" '重置为空白

    Dim xConnstr As String = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
                        "Data Source=" & (Server.MapPath("SiteTemplate.xls")) & ";" & _
                        "Extended Properties=Excel 8.0"

    ' create your excel connection object using the connection string
    Dim objXConn As New System.Data.OleDb.OleDbConnection(xConnstr)
    objXConn.Open()
    Dim objCommand As New OleDbCommand("SELECT * FROM [importsites$]", objXConn)




    'Creating the data reader
    Dim reader As OleDbDataReader
    reader = objCommand.ExecuteReader()

    Dim counter As Integer = 0
    While reader.Read()

        counter = counter + 1

        Dim siteID As Integer = 0
        Dim siteIWSref As String = Convert.ToString(reader("siteIWSref"))
        If siteIWSref = "" Then
            siteIWSref = "."
        End If
        Dim siteUPRN As String = Convert.ToString(reader("siteUPRN"))
        If siteUPRN = "" Then
            siteUPRN = "."
        End If
        Dim siteName As String = Convert.ToString(reader("siteName"))
        Dim siteAdd1 As String = Convert.ToString(reader("siteAdd1"))
        Dim siteAdd2 As String = Convert.ToString(reader("siteAdd2"))
        Dim siteAdd3 As String = Convert.ToString(reader("siteAdd3"))
        Dim sitePcode As String = Convert.ToString(reader("sitePcode"))
        Dim siteContact As String = Convert.ToString(reader("siteContact"))
        Dim siteContactPos As String = Convert.ToString(reader("siteContactPos"))
        Dim siteContactTel As String = Convert.ToString(reader("siteContactTel"))
        Dim siteDesc As String = Convert.ToString(reader("siteDesc"))
        Dim siteCompany As Integer = CInt(CompanyDD.SelectedValue)

        Dim siteOccupants As String = Convert.ToString(reader("siteOccupants"))

        Dim siteType As String = Convert.ToString(reader("siteType"))



        siteID = ImportIntotblSite(siteIWSref, siteUPRN, siteName, siteAdd1, siteAdd2, siteAdd3, sitePcode, siteContact, siteContactPos, siteContactTel, siteDesc, siteCompany, siteOccupants, siteType)

        LabelImport.Text &= siteID & siteIWSref & " " & siteUPRN & " " & siteName & " " & siteAdd1 & " " & siteAdd2 & " " & siteAdd3 & " " & " " & sitePcode & " " & siteContact & " " & siteContactPos & " " & siteContactTel & " " & siteDesc & " " & siteCompany & " " & siteOccupants & " " & " " & siteType & "<br>"


    End While
    reader.Close()
    objCommand.Dispose()
    objXConn.Close()

    btnBack.Enabled = True

    btnBack.Visible = True

    btnSave.Visible = True
    btnSave.Enabled = True

End Sub
Protected Function ImportIntotblSite(ByVal siteIWSref As String, ByVal siteUPRN As String, ByVal siteName As String, ByVal siteAdd1 As String, ByVal siteAdd2 As String, ByVal siteAdd3 As String, ByVal sitePcode As String, ByVal siteContact As String, ByVal siteContactPos As String, ByVal siteContactTel As String, ByVal siteDesc As String, ByVal siteCompany As Integer, ByVal siteOccupants As String, ByVal siteType As String) As Integer


    siteIWSref = Left(siteIWSref, 20)
    siteUPRN = Left(siteUPRN, 20)
    siteName = Left(siteName, 60)
    siteAdd1 = Left(siteAdd1, 50)
    siteAdd2 = Left(siteAdd2, 50)
    siteAdd3 = Left(siteAdd3, 50)
    sitePcode = Left(sitePcode, 10)
    siteContact = Left(siteContact, 35)
    siteContactPos = Left(siteContactPos, 35)
    siteContactTel = Left(siteContactTel, 20)
    siteDesc = Left(siteDesc, 220)
    siteOccupants = Left(siteOccupants, 120)
    siteType = Left(siteType, 35)


    Dim siteID As Integer = 0
    Try
        Dim SSAdapter As New importSitesDataSetTableAdapters.tblSiteTableAdapter
        Dim SSDataTable As importSitesDataSet.tblSiteDataTable = Nothing
        SSDataTable = SSAdapter.GetDataByNumbers(siteIWSref, siteName, siteCompany)
        If siteName = "" Then
            siteName = ""
        End If
        'see if the category already exists in the table, if not insert it
        If Not SSDataTable Is Nothing Then
            If siteName = "" Then
                LabelImport.Text = LabelImport.Text & _
                                    "<font color=red>ERROR: BLANK SITE NAME: ROW NOT IMPORTED : " & _
                                    "ID: " & siteID & _
                                   " Name: " & siteName & " " & siteCompany & ".</font><br>"

            ElseIf SSDataTable.Rows.Count > 0 Then
                If Not SSDataTable(0).siteID = Nothing Then
                    siteID = SSDataTable(0).siteID

                    LabelImport.Text = LabelImport.Text & _
                                               "<font color=blue> Recorded already exists : " & _
                                             "ID: " & siteID & _
                                            "Name: " & siteName & " " & siteCompany & ".</font><br>"
                End If
            End If
        End If


        If siteID = 0 And siteName <> "" Then
            siteID = Convert.ToInt32(SSAdapter.InsertQuery(siteIWSref, siteUPRN, siteName, siteAdd1, siteAdd2, siteAdd3, sitePcode, siteContact, siteContactPos, siteContactTel, siteDesc, siteCompany, siteOccupants, siteType))
            LabelImport.Text = LabelImport.Text & _
            "<font color=green> ROW SUCCESSFULLY IMPORTED: " & _
               " ID: " & siteID & _
               " Name: " & siteName & " " & siteCompany & ".</font><br>"
        End If


        Return siteID
        'SSAdapter.Dispose()

    Catch ex As Exception
        LabelImport.Text = LabelImport.Text & "<font color=red>" & ex.ToString & ".</font><br>"
        Return 0
    End Try

End Function


Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

    'TableButtons.Visible = False
    'FileUploadExcel.Visible = False
    'PanelUpload.Visible = False
    btnYes.Visible = False
    btnNo.Visible = False
    btnBack.Enabled = False
    btnBack.Visible = False
    ButtonView.Enabled = False
    ButtonImport.Enabled = False
    btnSave.Visible = False
    btnSave.Enabled = False
End Sub

试试这个,让我知道你的进展如何。

有一个很好的例子来说明如何将信息上传到 sql server 上: http://www.shiningstar.net/aspnet_articles/DataSet/DataSetProject.aspx

我知道它是 excel 但肯定不会有那么大的差异。

【讨论】:

  • 感谢您的回答,但是,就像我说的,我是新手,因此,我不知道如何将其翻译成 C# =/
  • 尝试用谷歌搜索一个 VB 到 C# 的转换器并用这种方式测试代码
  • 或尝试我发布的链接,我认为他们在 C# 中有测试代码,您可以使用它然后根据需要进行更改:-)
猜你喜欢
  • 2018-06-07
  • 2022-08-06
  • 1970-01-01
  • 1970-01-01
  • 2019-04-30
  • 2017-06-28
  • 1970-01-01
  • 2022-11-22
  • 1970-01-01
相关资源
最近更新 更多