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

时间:2015-01-18 01:07:11

标签: c# sql-server entity-framework

我的桌面上有SQL Server 2008 R2 SP2 ,上面有一个名为“DB”的数据库(SQL Server和Windows身份验证模式)。我创建了一个登录/用户来访问数据库而不使用Windows身份验证(我知道,这很糟糕,我们将在之后进行讨论)。

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

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

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

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

这是错误:

  

'调用与指定绑定约束匹配的类型'Twitter_NNA.Treeviews.TreeviewReg'上的构造函数引发异常。'

此行只打开一个自定义控件,其树视图绑定到数据库。

在IntelliTrace中,我还有其他例外:

  

连接超时已过期。尝试使用登录前握手确认时超时时间已过。这可能是因为登录前握手失败或服务器无法及时响应。尝试连接到此服务器所花费的时间是 - [Pre-Login] initialization = 63057; handshake = 2;

  

底层提供程序在打开时失败

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

  

名称“.......”在名称空间“......”中不存在

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

那么为什么笔记本电脑可以从“服务器资源管理器”窗口访问数据库,或者在解决方案中插入项目,但似乎无法在运行时这样做?我可以在放弃之前强制进行连接尝试吗?注意:整个过程都是通过wifi连接完成的

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

我还有一个附属问题:如何在我的桌面上创建与笔记本电脑上相同的用户,以便我可以使用Windows身份验证?或者换句话说,是否有任何好的教程可以解释如何在我的网络计算机用于连接的服务器上创建Windows用户(我在Google上尝试了一些“用户帐户和网络”类型的查询,但是找到了在Windows用户帐户上非常通用的东西,没有那么具体)。

[编辑@James]

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

连接字符串是:

<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" />

我没有理由怀疑自动代码的质量(无论如何在桌面上工作正常)。在我的代码中,每个都会抛出异常:

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]
            }
        }
    }

1 个答案:

答案 0 :(得分:0)

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

我尝试了所有这些,只有&#34;命名管道&#34;为我工作。

可以通过添加

在连接字符串中手动完成修改
  

;网络库= 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" />