2011-06-13 61 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; 

其他人是正确的,你的问题是,你是不是查询数据。当您生成数据集时,还会为您生成一个适配器,这将帮助您查询数据,如上所示。

相关问题