C# c SqlBulkCopy一直将我的第一列作为主键

C# c SqlBulkCopy一直将我的第一列作为主键,c#,sql-server,tsql,sqlbulkcopy,C#,Sql Server,Tsql,Sqlbulkcopy,我在循环中使用SqlBulkCopy将许多Excel工作表上载到DataTable中,我无法让它停止在工作表中的第一列上施加主键状态,该列称为Id,没有任何帮助,Id不包含唯一值,因此会触发重复键错误 SqlBulkCopyOptions未设置KeepIdentity;我尝试过指定两列作为主键;或者在列的开头或结尾添加一列作为主键。但只要我运行这个程序,它就会重置我的数据表的结构,使第一列成为主键,然后倒下 我正在使用列映射 foreach (String file in ValidFiles)

我在循环中使用SqlBulkCopy将许多Excel工作表上载到DataTable中,我无法让它停止在工作表中的第一列上施加主键状态,该列称为Id,没有任何帮助,Id不包含唯一值,因此会触发重复键错误

SqlBulkCopyOptions未设置KeepIdentity;我尝试过指定两列作为主键;或者在列的开头或结尾添加一列作为主键。但只要我运行这个程序,它就会重置我的数据表的结构,使第一列成为主键,然后倒下

我正在使用列映射

foreach (String file in ValidFiles)
{
    //string strConnection = "Data Source=MySystem;Initial Catalog=MySamplesDB;Integrated Security=True";

    string strConnection = System.Configuration.ConfigurationManager.ConnectionStrings["Rep004Filter.Properties.Settings.Database1ConnectionString"].ConnectionString;            
    string excelConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + file + ";Extended Properties=Excel 12.0;Persist Security Info=False;";

    OleDbConnection excelConnection = new OleDbConnection(excelConnectionString);
    excelConnection.Open();
    dtSchema = excelConnection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });

    Sheet1 = dtSchema.Rows[0].Field<string>("TABLE_NAME");
    Debug.WriteLine("Sheet name: " + Sheet1);

    OleDbCommand cmd = new OleDbCommand("Select * from [" + Sheet1 + "]", excelConnection);
    OleDbDataReader dReader;

    dReader = cmd.ExecuteReader();

    SqlBulkCopy sqlBulk = new SqlBulkCopy(strConnection);
    sqlBulk.ColumnMappings.Add("Id", "Id");              
    ... lots more column mappings here...
    sqlBulk.ColumnMappings.Add("Src", "Src");

    sqlBulk.DestinationTableName = "dbo.[Table]";
    sqlBulk.WriteToServer(dReader);
    excelConnection.Close();             
}

有什么想法吗?

ID列已经是数据库表中的主键。SqlBulkCopy不会对表架构进行任何修改。表的模式是什么?还有,你为什么提到KeepIdentity?标识列不是主键,它只是一个自动递增的列。代码中也没有数据表。在任何情况下,数据表都只是内存中的一种类型。它不会重置,每次调用newThank时都会再次创建它谢谢,我不知道KeepIdentity是自动递增的。我将更仔细地研究我是如何输入数据表的。我单独创建了带有附加列的表,但显然没有正确引用它。令人困惑的是,程序正在用新结构覆盖我的现有表,如果它创建了一个单独的表,我可能会意识到它们是不同的。非常感谢你的指点。