为什么我使用DB生成的代码得到空结果

本文关键字:代码 结果 DB 为什么 | 更新日期: 2023-09-27 17:59:05

我使用的是SQL Server 2005。我有一个表scores,它有6行和6列——name, scoreid

我用VS添加了数据源,它生成了一个名为testDataSet的数据集。

所以我尝试了以下代码,结果为零:

testDataSet db = new testDataSet();
var result = from row in db.scores
             select row.name;

问题出在哪里?

为什么我使用DB生成的代码得到空结果

您遇到的问题是查询一个空的DataSet

您首先必须创建一个到testDataSet的连接,并用数据库中的数据填充其中包含的表。

如果您使用VS提供的自动化工具创建了testDataSet,那么该工具也将创建相关的TableDataAdapters(在它们自己的命名空间中)来填充和更新您的DataSet

初始化相关的TableDataAdapter,并使用Fill(db)方法从数据库中获取数据。

您可以这样查询数据表:

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")
});

请尝试以下代码:

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

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

数据集只是查询结果的结构化容器,它与数据源(数据库)没有连接。为了用数据填充数据集,您需要使用带有SelectCommand的DataAdapter并调用Fill方法。

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