我打开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>
答案 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();
}
}