我正在将数据从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。那里只有空值。
答案 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“”