2012-07-02 33 views
2

我是一个新的LINQ到SQL学习者,这是我第一次尝试创建数据查看器程序。这个想法很简单,我想创建一个能够查看数据库中表格内容的软件。而已。C#Linq到SQL连接字符串(新手)

我已经在这里得到了一个早期的问题,我已经看到很多tute和文章在线,但我仍然无法修复这个bug。

这里是我的代码:

static void Main(string[] args) 
    { 
     string cs = "Data Source=localhost;Initial Catalog=somedb;Integrated Security=SSPI;"; 

     var db = new DataClasses1DataContext(cs); 
     db.Connection.Open(); 

     foreach (var b in db.Mapping.GetTables()) 
      Console.WriteLine(b.TableName); 

     Console.ReadKey(true); 
    } 

当我试图检查db.connection.equals(null);返回false,所以我想我已经成功地连接到数据库,因为没有错误可言。但上面的代码不会在屏幕上打印任何内容。

我有点迷路,不知道这里发生了什么。有人知道这里出了什么问题吗?

+0

多少映射是那里的数据上下文?请尝试'Console.WriteLine(db.Mapping.GetTables()。Count();'?映射与表不一样 – Marijn

+0

确实!数据上下文中根本没有映射,但count()返回一个与映射计数相关的数字,我将拖拽映射到设计器之后,谢谢! –

回答

3

好吧,让我们来看看其中的一些行:


var db = new DataClasses1DataContext(cs); 

这是一个构造一个完全正常的和精细的呼叫。由于DataContext实现了IDisposable,因此当您真正使用它时,请考虑使用using语句。

using (var db = new DataClasses1DataContext(cs)) 
{ 
    // do stuff with db here 
} // when leaving the block, db is disposed - even in the case of an exception. 

db.Connection.Open(); 

不要这样做。 DataContext将在需要时打开和关闭连接。


foreach (var b in db.Mapping.GetTables()) 
    Console.WriteLine(b.TableName); 

嗯,也许有在映射没有桌子。您是否将服务器资源管理器中的表格拖放到设计器表面上?

大多数人会查询表而不是仔细查看映射。考虑这个代码,而不是:

foreach (var customer in db.Customer.Take(10)) 
{ 
    Console.WriteLine(customer.Name); 
} 

这里是展示如何将表从服务器资源管理器拖放到设计表面上的视频:

http://www.youtube.com/watch?v=z9L11qrw9gk

+0

你说的所有的东西都是真的!我没有添加任何表所以gettables.count()的映射返回0.非常感谢! –

0

试着改变你的连接字符串下面

string cs = @"Data Source=.\;Initial Catalog=somedb;Integrated Security=SSPI;"; 
+0

感谢您回答我的问题,但尝试出来后没有运气 我做了一些其他的连接字符串组合,不知道怎么解决这个问题好像我缺少一些属性让linq跟sql server交谈,我还找不到它 –