2011-06-13 42 views
0

我正在使用SQL Server 2005.我有一個表格scores,有6行和列 - name, scoreid爲什麼使用DB生成的代碼得到空結果?

我用VS添加了數據源並生成了一個名爲testDataSet的數據集。

所以,我想下面的代碼,給了我零分的結果:

testDataSet db = new testDataSet(); 

var result = from row in db.scores 
      select row.name; 

問題出在哪裏?

+0

您使用LINQ to SQL嗎? – 2011-06-13 11:32:34

+0

我不確定,我想我是... – prgDevelop 2011-06-13 11:34:41

+0

在這種情況下,請您解釋一下,您是如何在Visual Studio中生成名爲testDataSet的數據集的?而且,你的意思是「我添加了數據源」。你在哪裏添加它以及如何添加? – 2011-06-13 11:39:58

回答

0

DataSet只是查詢結果的結構化容器,它沒有連接到數據源(數據庫)。爲了使用數據填充數據集,您需要使用DataAdapterSelectCommand並調用Fill方法。

var myConn = new SqlConnection ("..."); 
var myAdapter = new SqlDataAdapter ("SELECT * FROM TableName", myConn); 
var myData = new testDataSet(); 
myAdapter.Fill (myData, "TableName"); 
+0

我認爲他正在使用LINQ to SQL,而testDataSet根本不是一個數據集,而是Linq to SQL上下文。這由他的示例的db.scores部分得到證實,其中分數是表名。 – 2011-06-13 11:32:12

+0

對不起。 =) – 2011-06-13 12:10:46

+0

@zespri - NP :-) – PHeiberg 2011-06-13 12:14:34

0

你要高度重視查詢dataTable的是這樣的:

DataTable products = ds.Tables["Product"]; 

var query = products.AsEnumerable(). 
Select(product => new 
{ 
    ProductName = product.Field<string>("Name"), 
    ProductNumber = product.Field<string>("ProductNumber"), 
    Price = product.Field<decimal>("ListPrice") 
}); 
1

您遇到的probem是您要查詢一個空DataSet

您首先必須創建一個到testDataSet的連接,並使用數據庫中的數據填充其中包含的表。

如果已創建testDataSet與自動化工具VS提供,那麼該工具會還設立了相關TableDataAdapters(在自己的命名空間)填寫並更新您DataSet

初始化相關的TableDataAdapter並使用Fill(db)方法從數據庫中獲取數據。

+0

但不是所有的數據庫都進入我的電腦內存? – prgDevelop 2011-06-13 11:56:17

+0

是的,但你可以配置'TableDataAdapter'的默認'SelectCommand'(或者根據你的喜好添加額外的查詢)來限制你的查詢範圍,使用'WHERE'子句和必要的'parameters'。也許你還應該看看LINQ to SQL,你可以直接使用LINQ來以你想要的方式查詢數據庫上下文。 – InBetween 2011-06-13 12:01:30

0

試試這個代碼,而不是:

scoresTableAdapter adapter = new scoresTableAdapter(); 
var result = from row in adapter.GetData() select row.name; 

其他人是正確的,你的問題是,你是不是查詢數據。當您生成數據集時,還會爲您生成一個適配器,這將幫助您查詢數據,如上所示。

相關問題