2012-12-05 84 views
0

我使用Visual Studio 2010 Express创建了一个Sql Compact数据库(sdf-File),其中包含多个表和关系。从这个数据库中,我生成了一个强类型的数据集。从本地Sql Compact数据库更新强类型数据集

现在我想用数据库中的内容填充数据集。 所以我使用下面的代码连接到数据库并填充数据集。

//My strongly typed dataset 
localData = new LokalStorageDataSet(); 

//SqlCe-Connection 
localConnection = new SqlCeConnection(@"Data Source=|DataDirectory|\TempStorage.sdf; Password='xyc';Persist Security Info=True"); 

localConnection.Open(); 
SqlCeCommand command = new SqlCeCommand("SELECT * FROM progstates", localConnection); 
localDataAdapter = new SqlCeDataAdapter(command); 

localDataAdapter.Fill(localData); 

问题是没有行被添加到我的数据集,虽然在数据库中有行。 如果我使用一个SqlCeReader读取SqlCeCommand的结果,读者返回行:

SqlCeDataReader dr = command.ExecuteReader(); 

     while (dr.Read()) 
     { 
      ... 
     } 

你能不能给我,为什么我的数据集不从数据集中的表中获取行的原因是什么?

编辑:我看到在我的数据集一个新的DataTable中创建一个名为“表”与像我要求的一个(progstate)同列,但也该表具有0

回答

1
EDITED ***** 

Try This :- 

//My strongly typed dataset 
localData = new LokalStorageDataSet(); 

//SqlCe-Connection 
localConnection = new SqlCeConnection(@"Data Source=|DataDirectory|\TempStorage.sdf; Password='xyc';Persist Security Info=True"); 


SqlCeCommand command = new SqlCeCommand("SELECT * FROM progstates", localConnection); 

localConnection.Open(); 

var dataReader = command.ExecuteReader(); 

localData.Load(dataReader,LoadOption.Upsert,localData.Tables[0]); 

localConnection.Close(); 

一个rowCount时或者你不能这样用DataAdapter这样做: -

localDataAdapter = new SqlCeDataAdapter(); 

SqlCeCommand command = new SqlCeCommand("SELECT * FROM progstates", localConnection); 

localDataAdapter.SelectCommand = command; 

localConnection.Open(); 

localDataAdapter.SelectCommand.ExecuteNonQuery(); 
localDataAdapter.Fill(localData.Tables[0]); 

localConnection.Close(); 
+0

嗯这个作品,谢谢!但是为什么它不适用于SqlCeDataAdapter?如果我可以使用适配器,我更喜欢它。当我将数据集中的数据写回到数据库时(使用dataAdapter.Update(dataset);),我也必须使用它。不幸的是,这不起作用。 :( – Mossos

+0

我会尽快更新。 – Derek

+0

嗯,你能描述一下这个方法吗?我在数据集类中找不到合适的方法。 – Mossos

相关问题