从excel到sql表的数据是以NULL值导入的......为什么?

时间:2013-06-01 08:21:31

标签: c# sql excel

我正在将数据从excel导入数据库。 以下是excel列的架构: 下面是db ....的模式,并且与excel表数据完全匹配....................

ID  integer                 
organizationId  integer             
categoryId  integer         
attribute   text          
Y1960       integer or null     
Y1961       integer or null      
Y1962       integer or null       
Y1963       integer or null      
Y1964       integer or null     
Y1965       integer or null       
Y1966       integer or null      
Y1967       integer or null       
Y1968       integer or null      
Y1969       integer or null

在数据库列中也是如此。我正在使用以下代码进行检索 first 10 columns from excel文件的数据。

OleDbConnection excelConnection =
                        new OleDbConnection(excelConnectionString);

        //Create OleDbCommand to fetch data from Excel
        OleDbCommand cmd = new OleDbCommand
        ("Select [ID],[organizationID],[categoryID],[parentID],[granularityLevel],[attribute],[Y1960],[Y1961],[Y1962],[Y1963],[Y1964],[Y1965] from [Details$]", excelConnection);

        excelConnection.Open();
        OleDbDataReader dReader;
        dReader = cmd.ExecuteReader();

        SqlBulkCopy sqlBulk = new SqlBulkCopy(connectionString);
        sqlBulk.DestinationTableName = "Data";
        sqlBulk.WriteToServer(dReader);

问题是来自excel文件的Y1960 column is not copied数据到数据库表中。 复制其他列,但不复制Y1960。那里只有空值。

4 个答案:

答案 0 :(得分:0)

我过去曾经遇到过这个问题,我发现解决方案是使目标数据类型为浮点数。这里有一个建议,首先暂存数据,然后转换也可以选择Error converting data types when importing from Excel to SQL Server 2008

答案 1 :(得分:0)

我希望Y1960是您的Excel表格的第一行。

当你在那个时候执行此复制任务时first excel sheet row take as title of column这就是为什么不应该复制这一行的原因。您必须在工作表顶部添加一行标题,而不是尝试它。

答案 2 :(得分:0)

我遇到了同样的问题,两列未正确复制,而是插入空值。解决了我的问题是在扩展属性中使HDR = NO。 将所有列设为Varchar。它适用于我的场景,因为我可以在SQL中用VC做任何事情

谢谢, TP

答案 3 :(得分:0)

我的混合数据在从excel移动到Sql表时显示为Null。要在excel的连接字符串中解决此添加IMEX选项。它告诉驱动程序始终将“混合”数据列读作文本。

Provider = Microsoft.Jet.OLEDB.4.0; Data Source = D:\ MyExcel.xls; Extended Properties =“”Excel 8.0; HDR = Yes; IMEX = 1“”