vb.net用额外的列将csv导入数据库 [英] vb.net import csv into database with extra column

查看:52
本文介绍了vb.net用额外的列将csv导入数据库的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

下面是我的代码,将.csv文件导入sql服务器数据库.虽然从.csv文件导入的记录没有问题,但是在导入时需要添加额外的列.即使我已经硬编码了额外列的值(MetNo),但导入后该字段还是空的.我在这里做错了什么?MetNo列不是.csv文件的一部分,需要添加为标签值

Below is my code to import a .csv file into sql server database. While the records from the .csv file import without issues, there is a need to add an extra column while importing. Even though I have hard coded the value for the extra column (MetNo), the field is empty after importing. What am I doing wrong here? The MetNo column is not a part of the .csv file and needs to be added as a label value

        Private Sub ReadAndInsertCSVData()
        Dim table As New DataTable()
        table.Columns.Add("ColumnA")
        table.Columns.Add("ColumnB")
        table.Columns.Add("ColumnC")
        table.Columns.Add("ColumnD")
        table.Columns.Add("ColumnE")
        table.Columns.Add("ColumnF")
        table.Columns.Add("ColumnG")
        table.Columns.Add("ColumnH")
        table.Columns.Add("ColumnI")
        table.Columns.Add("ColumnJ")
        table.Columns.Add("ColumnK")
        table.Columns.Add("ColumnL")
        table.Columns.Add("ColumnM")
        table.Columns.Add("ColumnN")
        table.Columns.Add("ColumnO")
        table.Columns.Add("ColumnP")
        table.Columns.Add("ColumnQ")
        table.Columns.Add("ColumnR")
        table.Columns.Add("ColumnS")
        table.Columns.Add("ColumnT")
        table.Columns.Add("ColumnU")
        table.Columns.Add("ColumnV")
        table.Columns.Add("ColumnW")
        table.Columns.Add("MetNo")
        Dim parser As New FileIO.TextFieldParser("C:\S07_180004.CSV")
        parser.Delimiters = New String() {","}
        parser.HasFieldsEnclosedInQuotes = True
        parser.TrimWhiteSpace = True
        Do Until parser.EndOfData = True
            table.Rows.Add(parser.ReadFields())
        Loop
        Dim strSql As String = "INSERT INTO dbo.MetData " _
                & "(ColumnA, ColumnB, ColumnC, ColumnD, ColumnE, ColumnF, ColumnG, ColumnH, ColumnI, ColumnJ, ColumnK, ColumnL, ColumnM, ColumnN, ColumnO, " _
                & "ColumnP, ColumnQ, ColumnR, ColumnS, ColumnT, ColumnU, ColumnV, ColumnW, MetNo) VALUES (@ColumnA, @ColumnB, @ColumnC, " _
                & "@ColumnD, @ColumnE, @ColumnF, @ColumnG, @ColumnH, @ColumnI, @ColumnJ, @ColumnK, @ColumnL, @ColumnM, @ColumnN, @ColumnO, @ColumnP, " _
                & "@ColumnQ, @ColumnR, @ColumnS, @ColumnT, @ColumnU, @ColumnV,  @ColumnW, @MetNo)"
        Dim SqlconnectionString As String = "Data Source=ServerAddress;Initial Catalog=CatalogName;Integrated Security=SSPI;"
        Using connection As New SqlClient.SqlConnection(SqlconnectionString)
            Dim cmd As New SqlClient.SqlCommand(strSql, connection)
With cmd.Parameters
                cmd.Parameters.Add("@ColumnA", SqlDbType.Int, 4, "ColumnA")
                cmd.Parameters.Add("@ColumnB", SqlDbType.DateTime, 10, "ColumnB")
                cmd.Parameters.Add("@ColumnC", SqlDbType.Time, 8, "ColumnC")
                cmd.Parameters.Add("@ColumnD", SqlDbType.VarChar, 50, "ColumnD")
                cmd.Parameters.Add("@ColumnE", SqlDbType.VarChar, 50, "ColumnE")
                cmd.Parameters.Add("@ColumnF", SqlDbType.Decimal, 28, "ColumnF")
                cmd.Parameters("@ColumnF").Precision = 28
                cmd.Parameters("@ColumnF").Scale = 10
                cmd.Parameters.Add("@ColumnG", SqlDbType.VarChar, 50, "ColumnG")
                cmd.Parameters.Add("@ColumnH", SqlDbType.VarChar, 50, "ColumnH")
                cmd.Parameters.Add("@ColumnI", SqlDbType.Decimal, 28, "ColumnI")
                cmd.Parameters("@ColumnI").Precision = 28
                cmd.Parameters("@ColumnI").Scale = 10
                cmd.Parameters.Add("@ColumnJ", SqlDbType.VarChar, 50, "ColumnJ")
                cmd.Parameters.Add("@ColumnK", SqlDbType.Decimal, 28, "ColumnK")
                cmd.Parameters("@ColumnK").Precision = 28
                cmd.Parameters("@ColumnK").Scale = 10
                cmd.Parameters.Add("@ColumnL", SqlDbType.VarChar, 50, "ColumnL")
                cmd.Parameters.Add("@ColumnM", SqlDbType.Int, 10, "ColumnM")
                cmd.Parameters.Add("@ColumnN", SqlDbType.VarChar, 50, "ColumnN")
                cmd.Parameters.Add("@ColumnO", SqlDbType.Int, 4, "ColumnO")
                cmd.Parameters.Add("@ColumnP", SqlDbType.VarChar, 50, "ColumnP")
                cmd.Parameters.Add("@ColumnQ", SqlDbType.Int, 4, "ColumnQ")
                cmd.Parameters.Add("@ColumnR", SqlDbType.VarChar, 50, "ColumnR")
                cmd.Parameters.Add("@ColumnS", SqlDbType.Int, 4, "ColumnS")
                cmd.Parameters.Add("@ColumnT", SqlDbType.VarChar, 50, "ColumnT")
                cmd.Parameters.Add("@ColumnU", SqlDbType.Int, 4, "ColumnU")
                cmd.Parameters.Add("@ColumnV", SqlDbType.VarChar, 50, "ColumnV")
                cmd.Parameters.Add("@ColumnW", SqlDbType.Int, 4, "ColumnW")
                cmd.Parameters.Add("@MetNo", SqlDbType.VarChar, 6, "MetNo")
                cmd.Parameters("@MetNo").Value = "087826"
            End With
            Dim adapter As New SqlClient.SqlDataAdapter()
            adapter.InsertCommand = cmd
            Dim intRowsAdded As Int32 = adapter.Update(table)
        End Using
    End Sub

推荐答案

用parser.ReadFields()方法填充表格后,您需要将数据添加到新列中

After filling the table with parser.ReadFields() method you need to add the data to the new column

        For Each row As DataRow In table.Rows
            row("MetNo") = "new data"
        Next
​

这篇关于vb.net用额外的列将csv导入数据库的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆