将CSV写入具有标识行的数据表

问题描述 投票:0回答:1

我具有以下设计的SQL Server数据库表:

    [Id]           INT            IDENTITY (1, 1) NOT NULL,
    [State]        NVARCHAR (MAX) NOT NULL,
    [Abbreviation] NVARCHAR (MAX) NOT NULL,
    CONSTRAINT [PK_USStates] PRIMARY KEY CLUSTERED ([Id] ASC)

我有一个.csv文件,格式如下:

Alabama, AL
Alaska, AK

注意:.csv文件中没有ID字段。

[当我尝试将.csv文件导入到我的SQL Server数据库中时,收到一个错误,因为它试图将“ Alabama”(。csv的字段1)写入ID字段(数据库表中的字段1)。

我如何告诉CSVHelper数据库中的字段1是一个Identity字段,并忽略它,从而在字段2中写入“阿拉巴马州”,在字段3中写入“ AL”?]

感谢您的帮助。

我具有以下设计的SQL Server数据库表:[Id] INT IDENTITY(1、1)NOT NULL,[状态] NVARCHAR(MAX)NOT NULL,[缩写] NVARCHAR(MAX)...

csvhelper
1个回答
0
投票

您未提供有关如何将文件导入SQL Server数据库的任何指示。这样可以将其导入名为StateTable的表实体类中。

public class Program
{
    public static void Main(string[] args)
    {

        using (MemoryStream stream = new MemoryStream())
        using (StreamWriter writer = new StreamWriter(stream))
        using (StreamReader reader = new StreamReader(stream))
        using (CsvReader csv = new CsvReader(reader))
        {
            writer.WriteLine("Alabama,AL");
            writer.WriteLine("Alaska,AK");
            writer.Flush();
            stream.Position = 0;

            csv.Configuration.Delimiter = ",";
            csv.Configuration.HasHeaderRecord = false;
            csv.Configuration.RegisterClassMap<StateTableMap>();

            var results = csv.GetRecords<StateTable>().ToList();
        }
    }
}

public class StateTable
{
    public int Id { get; set; }
    public string State { get; set; }
    public string Abbreviation { get; set; }
}

public class StateTableMap : ClassMap<StateTable>
{
    public StateTableMap()
    {
        Map(m => m.State).Index(0);
        Map(m => m.Abbreviation).Index(1);
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.