Linq2Sql打开错误的数据库

时间:2014-07-01 13:04:51

标签: c# linq-to-sql

我打开LINQ 2 SQL连接以从数据库中检索设置。我们的测试环境有几个用于测试的数据库,使用我的应用程序的人之一使用的不同于我使用的数据库。问题是,数据仍然来自我正在测试的数据库,而不是她正在使用的数据库。

简单地说: *我使用DataBaseTestOne编程 *测试人员将连接文本更改为使用过的DataBaseTestTwo *数据是从DataBaseTestOne

加载的

我使用的代码如下:

    try
    {
        using (SqlConnection connection = new SqlConnection(connectionString))
        using (DbCommunicationDataContext context = new DbCommunicationDataContext())
        {
            var result = context.gprefs.FirstOrDefault();
            if (result != null)
            {
                Host = result.cpopserver;
                Port = Convert.ToInt32(result.npopport);
            }
        }
    }
    catch (Exception e)
    {
        Logger.LogEvent("There was an error loading settings:\n" + e);
    }

gprefs表只有一行,用于存储系统首选项。我已经在调试模式的第一行停止并确认连接为null并且在方法的开头不存在上下文。我还确认connectionString指向正确的数据库(DataBaseTestTwo)。

作为测试,我尝试用空字符串替换connectionString,它仍然连接到DataBaseTestOne。

当我创建DataContext时,我从DataBaseTestOne中提取表,但是很难相信这意味着我只能访问那个数据库。

我希望有一些我忽略的简单问题,但我似乎无法找到它。

其他信息

在处理数据库工作的类中,我在Properties - >下找到了一个设置。名为DataBaseTestOne的设置,包含该数据库的连接文本。我尝试删除它,并在下面一行的DbCommunication.designer.cs文件中出错:

public DbCommunicationDataContext() : 
        base(global::Utilities.Properties.Settings.Default.DataBaseTestOneConnectionString, mappingSource)
{
    OnCreated();
}

这是那里的引用因为那是我从中获取初始表的地方,还是我在创建上下文时以某种方式硬编码了这个数据库?我打赌我可以将属性更改为指向正在使用的数据库,但我不记得在过去使用Linq To Sql时必须这样做,而且这会在明文中留下潜在的密码。 / p>

2 个答案:

答案 0 :(得分:1)

可能是愚蠢的,如果可以的话,我会把它作为评论,但是 - 检查数据库连接的定义在哪里?它显然是从某处拉动连接。配置文件是显而易见的检查位置。

编辑:有时,配置设置在一开始就只读一次。您可能需要重新启动应用程序才能使更改生效。之前我不得不做这样的事情,通常IIS重置会处理它,一切都会被重新初始化。

答案 1 :(得分:1)

问题是我从未将连接与数据上下文相关联。我修改了我的代码,如下所示,事情开始起作用了。

        //using (SqlConnection connection = new SqlConnection(connectionString))
        using (DbCommunicationDataContext context = new DbCommunicationDataContext(connectionString))
        {
            var result = context.gprefs.FirstOrDefault();
            if (result != null)
            {
                wcf = result.cportlserver;
                resend = result.ndatsentaft.ToString();
            }
        }