如何使用asp.net将上传的.csv文件保存到SQL Server Management数据库中

时间:2011-08-11 07:27:48

标签: asp.net sql visual-studio

这是我的代码示例。我使用的是带有asp.net 2.0版的Microsoft Visual Studio 2010,当用户单击导入按钮时,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();
}

2 个答案:

答案 0 :(得分:0)

  1. 您的插入查询必须在您的
  2. Sr不是您的参数,而是line,其中包含您的数据数组。因此,您必须向AddWithValue提供line[i]
  3. 您在代码中分配了两次line = Sr.ReadLine(),只需在while
  4. 中执行此操作

    所以尝试这样的事情:

    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();
    }
    

答案 1 :(得分:0)

我做过类似的事情然而它是我需要导入的xls文件但实际上并没有多少不同,这是我使用的代码

受保护的Sub 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肯定不会有那么大的差异。