2017-08-16 70 views
0

我正在使用SQLite和数据集。在我的数据库中,我有相互参照的表格。让我们称他们为表1,表2,...以下是我作为一个的exaple使用EER图的表示:由数据集创建的GetRows方法返回null

enter image description here

我从数据集中的数据在Table1Row和对象的形式如果只能有一个对表3的引用,则会生成非常有用的生成方法Table2Row[] table1Row.GetTable2Rows()和生成的Table3Row参数。但是如果我调用这个方法,我得到的结果是一个空集合,参数为null。所有其他属性都是正确的,我很肯定表格填写正确。

我的选择查询非常简单:

SELECT * FROM table1 WHERE key = @key; 

但是即使我使用预定义的getData问题仍然存在。从那以后,我使用的TableAdapter来获得正确的行:

Table1DataTable table1DataTable = table1TableAdapter.GetDataByKey(); 
return table1DataTable.FindByKey(key); 

这是很难找到解决这个问题,因为生成的方法的名称总是不同。

谢谢您的帮助

编辑: 这里是生成的方法:

public virtual DataSet.Table1DataTable GetDataByKey(long key) { 
     this.Adapter.SelectCommand = this.CommandCollection[1]; 
     this.Adapter.SelectCommand.Parameters[0].Value = ((long)(key)); 
     DataSet.Table1DataTable dataTable = new DataSet.Table1DataTable(); 
     this.Adapter.Fill(dataTable); 
     return dataTable; 
    } 
+0

'GetRows方法创建需要的所有数据通过数据集返回null'我想你可能忘记在你的文章中包含该代码。 – mjwills

+0

不,我只是没有发现该部分非常有用,因为标准的GetData方法不起作用,要么我不认为这是问题。我认为更重要的是整个方法都是错误的,或者在获取数据后我缺少额外的步骤 – Lavandysh

回答

0

我相信我已经找到了解决办法。您需要使用相同的数据集填充其他表,而不使用getData方法。然后,它的工作原理是这样的:

 DataSetTableAdapters.Table1TableAdapter table1TableAdapter = new DataSetTableAdapters.Table1TableAdapter(); 
     table1TableAdapter.FillByKey(dataset.Table1,key); 

     DataSetTableAdapters.Table2TableAdapter table2TableAdapter = new DataSetTableAdapters.Table2TableAdapter(); 
     table2TableAdapter.Fill(dataset.Table2); 

     DataSetTableAdapters.Table3TableAdapter table3TableAdapter = new DataSetTableAdapters.Table3TableAdapter(); 
     table3TableAdapter.Fill(dataset.Table3); 

     return dataset.Table1.FindBykey(key); 

现在我需要做的是优化它,这样我就不会得到我不从表2和3