2010-05-16 203 views
1

我有一个excel格式的表格(2007年,但我可以自然保存为下面的任何东西),并且我有一个SQL Server Compact Edition 3.5 SP1数据库表格和相应的列。我只是想用来自Excel文件的数据填充SQLCE表。数据仅包含字符串和整数。导入Excel到SQL Server CE

我试过this utility无济于事,我也试过这个SQL script但是它不起作用,因为SQL Server CE不支持BULK INSERT。我也发现这个Microsoft tutorial,但我基本上无能为力,当涉及到SQL,提供商等...

谢谢!

编辑:我想出了下面的代码(通过this post

 var fileName = string.Format("{0}\\DataValues.xls", Directory.GetCurrentDirectory()); 
     var connectionString = string.Format("Provider=Microsoft.Jet.OLEDB.4.0; data source={0}; Extended Properties=Excel 8.0;", fileName); 

     var adapter = new OleDbDataAdapter("SELECT * FROM [Sheet1$]", connectionString); 
     var ds = new DataSet(); 

     adapter.Fill(ds, "anyNameHere"); 

     DataTable dataTable = ds.Tables["anyNameHere"]; 

     foreach (DataRow row in dataTable.Rows) 
      _entities.MyObjectSet.AddObject(new MyObject() 
      { 
       Foo= (string)row[1], 
       Bar= Convert.ToInt32(row[2]), 
      }); 

     _entities.SaveChanges(); 

但调用SaveChanges()与崩溃“服务器生成的密钥和服务器生成的值不是由SQL Server精简支持。” 。我试过workaround改变所有标识类型GUID(唯一标识符=),但我仍然得到消息

EDIT2:我改变了StoreGeneratedPattern属性设置为“无”,现在它的工作原理。有趣的是,.SDF文件被复制到运行时目录,并且副本被更改,所以在项目中链接的.SDF中不会看到更改 - 您必须复制它手动

我的问题仍然存在 - 是否有一个SQL Server CE等效于以下?

BULK 
INSERT YourDestinationTable 
     FROM 'D:\YourFile.csv' 
      WITH 
    (
       FIELDTERMINATOR = ',', 
       ROWTERMINATOR = '\n' 
    ) 
GO 

甚至更​​好 - 像微软的SQL Server导入和导出向导,可以导出到SQL Server CE?

+1

为什么不写一个简单的C#程序,它将使用Office interop来读取Excel文件和SQLCE驱动程序以写入数据库?我没有提供一个例子,因为我不记得Office interop的心脏... – 2010-05-16 22:09:55

回答

1

我会避免使用EF(至少为此)。

您还没有发布数据库模式,但看看thisthis

虽然EF supports it in general, CE does not,所以你需要取消标记为服务器分配,并在创建对象时分配它。

+0

谢谢,这就是我最终做的,即将我的ID列切换到StoreGeneratedPattern = None – 2010-05-17 08:08:26