问题访问我的网络上的数据库(连接超时)

Issue accessing database on my network (connection timeout)

我的桌面上有 SQL Server 2008 R2 SP2 ,上面有一个名为 "DB" 的数据库(SQL 服务器和 Windows 认证模式)。我创建了一个 login/user 来访问数据库而不使用 windows 身份验证(我知道,这很糟糕,我们稍后再讨论)。

从我的笔记本电脑,我通过服务器资源管理器访问 visual studio 中的数据库没有问题,我还设法在我的解决方案中添加了一个 ADO.NET 基于我的数据库的实体数据模型。

如果我从桌面上 运行 项目,一切都运行得很好而且很快(实际上,除了在项目启动时读取数据库外,没有什么可做的)。

如果我 运行 从我的笔记本电脑上查看,一两分钟内没有任何反应,然后在显示任何内容之前崩溃。异常出现在我的 MainWindow.xaml 上的以下行:

<trvws:TreeviewReg Margin="0,0,0,0" Height="Auto" Width="Auto" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" />

这是错误:

'The invocation of the constructor on type 'Twitter_NNA.Treeviews.TreeviewReg' that matches the specified binding constraints threw an exception.'

这一行只是打开一个带有绑定到数据库的树视图的自定义控件。

在 IntelliTrace 中,我还有其他异常:

Connection Timeout Expired. The timeout period elapsed while attempting to consume the pre-login handshake acknowledgment. This could be because the pre-login handshake failed or the server was unable to respond back in time. The duration spent while attempting to connect to this server was - [Pre-Login] initialization=63057;handshake=2;

The underlying provider failed on open

此外,在我尝试 运行 项目后,还会弹出另外 2 个错误:

The name "......." does not exist in the namespace "......"

问题是该名称实际上存在于命名空间中,并且这些错误不会显示在桌面上。

那么为什么笔记本电脑可以从 "server explorer" window 或通过在解决方案中插入项目访问数据库,但在 运行 时似乎无法访问?我可以在放弃之前强制连接尝试次数吗?注意:整个过程都是通过 wifi 连接完成的

如果它可以帮助,从我的解决方案中的数据模型,如果在图表上我尝试从数据库更新模型,我需要一段时间但设法连接到数据库进行更新。

我还有一个小问题:如何在台式机上创建与笔记本电脑上相同的用户,以便使用 windows 身份验证?或者换句话说,是否有任何好的教程可以解释如何在我的网络计算机将用于连接的服务器上创建 windows 用户(我在 [= 上尝试了一些 "user account & network" 类型的查询69=],但在 windows 用户帐户上发现了非常通用的东西,没有那么具体)。

[编辑@James]

插入 ADO.NET 实体数据模型 (= Entity Framework) 时自动生成数据库访问代码。

连接字符串是:

<add name="TwitterEntities" connectionString="metadata=res://*/DataBase.TwitterDb.csdl|res://*/DataBase.TwitterDb.ssdl|res://*/DataBase.TwitterDb.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=********;initial catalog=Twitter;user id=*********;password=********;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />

我没有理由怀疑自动代码的质量(无论如何它在桌面上运行良好)。在我这边的代码中,异常抛出在 for each:

public void CountryConstructor()
    {

        //get the data from the query
        using (var TwitterDb = new TwitterEntities())
        {
                            //empty the current treeview
            AllRegions.Clear();

            //open the query and order it alphabetically
            foreach (var cTv in TwitterDb.CountryTreeviews
                                                .OrderBy(r => r.region_name)
                                                .ThenBy(c => c.country_name)
                                                .ThenBy(s => s.sector_name)
                                                .ThenBy(e => e.entity_name)
                                                .ToList())
            {
                   [Whatever here]
            }
        }
    }

我通过检查连接向导的 "Advanced" 部分提供的选项找到了解决方案。可以强制网络库(TCP/IP、命名管道、共享内存或 VIA),但默认情况下它是空白的(我猜自动选择了错误的选项)。

我都试过了,只有 "Named Pipes" 对我有用。

可以在连接字符串中手动修改,添加

;network library=dbnmpntw

连接字符串现在是:

<add name="TwitterEntities" connectionString="metadata=res://*/DataBase.TwitterDb.csdl|res://*/DataBase.TwitterDb.ssdl|res://*/DataBase.TwitterDb.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=********;initial catalog=Twitter;user id=*********;password=********;network library=dbnmpntw;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />