首页 > 解决方案 > C#如何忽略无效列

问题描述

我创建了以下内容SqlBulkCopy以将 Excel 中的数据插入 SQL Server 数据库。如果我的 Excel 中有无效列,例如second_name而不是last_name,我的程序将忽略该列,而其他列中的数据将被添加到数据库中。

但是,使用下面的代码并没有发生这种情况。我收到一条错误消息

没有为一个或多个必需参数指定值

并且没有数据插入数据库。有人可以帮我解决这个问题吗?谢谢

string myexceldataquery = "select person_id,first_name,last_name,gender from [Sheet1$]";

try
{
    string sexcelconnectionstring = @"provider=microsoft.ACE.OLEDB.12.0;data source=" + excelFilePath +
             ";extended properties=" + "\"excel 12.0;hdr=yes;\"";

    con.Open();

    OleDbConnection oledbconn = new OleDbConnection(sexcelconnectionstring);
    OleDbCommand oledbcmd = new OleDbCommand(myexceldataquery, oledbconn);

    oledbconn.Open();
    OleDbDataReader dr = oledbcmd.ExecuteReader();

    SqlBulkCopy bulkcopy = new SqlBulkCopy(con);
    bulkcopy.DestinationTableName = "person";

    while (dr.Read())
    {
        bulkcopy.ColumnMappings.Add("person_id", "person_id");
        bulkcopy.ColumnMappings.Add("first_name", "first_name");
        bulkcopy.ColumnMappings.Add("last_name", "last_name");
        bulkcopy.ColumnMappings.Add("gender", "gender");
    }

    bulkcopy.WriteToServer(dr);

    dr.Close();
    oledbconn.Close();

    MessageBox.Show("File imported into sql server.");
    con.Close();
}
catch (Exception ex)
{
    MessageBox.Show(ex.Message.ToString());
}

标签: c#sql-serverexcelsqlbulkcopy

解决方案


推荐阅读