2012-06-28 212 views
2

我想用LINQ查询MySQL数据库。LINQ to MySQL查询返回无结果

首先,我已经安装了MySQL .NET连接器。然后在Visual Studio中创建一个新的控制台应用程序。

然后我点击工具栏上的Data,然后点击Add New Data Source

在数据源配置向导中,我选择Database => Dataset => New Connection,我配置我的连接参数,然后选择我的相关表格,视图等并点击完成。

我的数据源名为Foo,我想查询的表名为Bar

然后我尝试使用LINQ像下面查询我的数据表:

fooDataSet.barDataTable foobar = new fooDataSet.barDataTable(); 
var results = from data in foobar 
       select data; 

foreach (var result in results) 
{ 
    Console.WriteLine(result); 
}; 

我假定这是相当于下面的MySQL

SELECT * FROM BAR; 

即使我的表(酒吧)有大量的数据,我没有收到任何数据。当我断点适当和可变深入到我的结果的结果视图,它只是saysЖ

枚举没有结果

enter image description here

我要去哪里错了吗?

+0

如果你断点Console.Write并看看结果,你应该能够看到正在使用的实际SQL。可能值得检查的是没有任何奇怪的事情发生。 – Jerryf

+0

年数据源一定有问题 – JohnnBlade

回答

0

我想通通过在Windows窗体上重复初始步骤,将要从Server Explorer查询的表拖到Windows窗体上,然后分析代码。

事实证明,我首先需要创建一个我的数据集(Foo)的实例,然后为我的表(Bar)创建一个TableAdapter实例。

一旦我完成了这一步,我就调用我的表适配器的Fill方法,使用点符号传递数据集中的表名称。

然后,我运行我的表适配器的GetData()的AsEnumerable()扩展方法以获得一个EnumerableRowCollection,然后我可以针对使用LINQ运行查询。我的代码如下:

static void Main(string[] args) 
{ 
    fooDataSet fooDataSet = new fooDataSet(); 
    fooDataSetTableAdapters.barTableAdapter barTableAdapter = new fooDataSetTableAdapters.barTableAdapter(); 

    barTableAdapter.Fill(fooDataSet.bar); 

    var myDataTable = barTableAdapter.GetData().AsEnumerable(); 

    var bnl = from results in myDataTable 
       select results; 

    Console.ReadLine(); 
} 

侧面说明,在Visual Studio创建XSD文件,在每个表的每个字段默认设置为抛出一个异常,如果您尝试标准适用于柱与任何空值。您需要将XSD中字段的NullValue属性更改为(Empty)或(Null)以避免出现这种情况。

6

您正在创建一个新的表,然后试图从中读取数据(!有什么也没有,其新)

在LINQ to SQL中你可以这样做:

var results = from data in fooDataset.bar 
       select data; 

foreach (var result in results) 
{ 
    Console.WriteLine(result); 
}