Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# “System.IndexAutoFrangeException”找不到第12列_C#_Asp.net_.net_Visual Studio 2015 - Fatal编程技术网

C# “System.IndexAutoFrangeException”找不到第12列

C# “System.IndexAutoFrangeException”找不到第12列,c#,asp.net,.net,visual-studio-2015,C#,Asp.net,.net,Visual Studio 2015,错误是找不到第12列。但我已经仔细检查了拼写是否与数据库中的拼写相同。我尝试了一个小样本,就像前3列一样,它奏效了。但是当我试图使用我需要上传的文件时,它给出了错误 我怎么修理它 DataTable dt = new DataTable(); using (OleDbConnection con = new OleDbConnection(string.Format(CSV_CONNECTIONSTRING, csvPath))) { using (OleDbDataAdapter da

错误是找不到第12列。但我已经仔细检查了拼写是否与数据库中的拼写相同。我尝试了一个小样本,就像前3列一样,它奏效了。但是当我试图使用我需要上传的文件时,它给出了错误

我怎么修理它

DataTable dt = new DataTable();
using (OleDbConnection con = new OleDbConnection(string.Format(CSV_CONNECTIONSTRING, csvPath)))
{
    using (OleDbDataAdapter da = new OleDbDataAdapter("SELECT * FROM ["+File_Name+"]", con))
    {
        da.Fill(dt);
    }
}

try
{
    using (SqlBulkCopy bulkCopy = new SqlBulkCopy(ConString))
    {
        bulkCopy.ColumnMappings.Add(0, "medicine_id");
        bulkCopy.ColumnMappings.Add(1, "category_id");
        bulkCopy.ColumnMappings.Add(2, "subcategory_id");
        bulkCopy.ColumnMappings.Add(3, "med_name");
        bulkCopy.ColumnMappings.Add(4, "brand");
        bulkCopy.ColumnMappings.Add(5, "form_id");
        bulkCopy.ColumnMappings.Add(6, "poison_schedule");
        bulkCopy.ColumnMappings.Add(7, "strength");
        bulkCopy.ColumnMappings.Add(8, "image");
        bulkCopy.ColumnMappings.Add(9, "quantity");
        bulkCopy.ColumnMappings.Add(10, "unit");
        bulkCopy.ColumnMappings.Add(11, "threshold");
        bulkCopy.ColumnMappings.Add(12, "price");
        bulkCopy.ColumnMappings.Add(13, "manufacturer");
        bulkCopy.ColumnMappings.Add(14, "special_instructions");
        bulkCopy.ColumnMappings.Add(15, "active1");
        bulkCopy.ColumnMappings.Add(16, "active1_strength");
        bulkCopy.ColumnMappings.Add(17, "active2");
        bulkCopy.ColumnMappings.Add(18, "active2_strength");
        bulkCopy.ColumnMappings.Add(19, "active3");
        bulkCopy.ColumnMappings.Add(20, "active3_strength");
        bulkCopy.ColumnMappings.Add(21, "active4");
        bulkCopy.ColumnMappings.Add(22, "active4_strength");

        bulkCopy.DestinationTableName = "medicine";
        bulkCopy.BatchSize = dt.Rows.Count;
        bulkCopy.WriteToServer(dt);
        bulkCopy.Close();
    }
}
catch (System.Exception ex)
{
    throw ex;
}

从我所看到的,SqlBulkCopy忽略空值,这应该可以解决返回空值时的问题

编辑:要归功于伊戈尔·拉布丁,我在发布之前没有看到他的评论

using (SqlBulkCopy bulkCopy = new SqlBulkCopy(ConString, SqlBulkCopyOptions.KeepNulls))

如何获取源表dt?它有您期望的23列吗?这是我用来获取dt DataTable dt=new DataTable的代码;using OleDbConnection con=new OleDbConnectionstring.FormatCSV_CONNECTIONSTRING,csvPath{using OleDbDataAdapter da=new OleDbDataAdapter select*FROM[+File_Name+],con{da.Filldt;}'使用文本编辑器查看文件名或将其作为csv加载到excel中。每行有23列吗?是的,每行有23列。可能是某些行包含23列,但有空值,因此SqlBulkCopy忽略空值?当设置断点并进行调试时,您看到了什么?显然是在我将文件名更改为以前用于测试的文件名,错误消失了。但出现了一个新错误,即列“”不允许DBNull.Value。这是否意味着我需要将它们更改为Null?您确定源和目标中字段的顺序相同吗?是的。我检查了很多次。例如,我的文件只有8行,但当我尝试上载它时,出现错误列“”不允许DBNull.Value。因此,我尝试将其更改为null。当我检查数据库时,有许多行甚至不在文件中,并且大部分都为null。它们显示它具有药品id,而其余为null。但我在csv文件中只有8个药品。