Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/88.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在运行时vs2010更改数据集连接字符串_C#_Sql_Dataset - Fatal编程技术网

C# 在运行时vs2010更改数据集连接字符串

C# 在运行时vs2010更改数据集连接字符串,c#,sql,dataset,C#,Sql,Dataset,我找到了一个解决方案,它必须适用于比vs2010更旧的版本。我想知道如何为vs2010做到这一点?有人知道吗 让我再详细解释一下 我有一个c#生成的数据集。如何更改连接字符串,以便将数据集与另一个(结构相同但填充方式不同)数据库一起使用?这必须在运行时发生,因为我在编译时不知道服务器或数据库名称。我正在使用vs2010和SQL Server 2008 R2 Express我认为没有简单的方法,您无法以编程方式更改整个数据集的连接字符串,因为它是为每个TableAdapter设置的 您需要使用/

我找到了一个解决方案,它必须适用于比vs2010更旧的版本。我想知道如何为vs2010做到这一点?有人知道吗

让我再详细解释一下


我有一个c#生成的数据集。如何更改连接字符串,以便将数据集与另一个(结构相同但填充方式不同)数据库一起使用?这必须在运行时发生,因为我在编译时不知道服务器或数据库名称。我正在使用vs2010和SQL Server 2008 R2 Express

我认为没有简单的方法,您无法以编程方式更改整个
数据集
的连接字符串,因为它是为每个
TableAdapter
设置的

您需要使用/创建
TableAdapter
的分部类来更改连接字符串,因为
connection
属性是
internal
(如果DAL位于不同的程序集中)。不要更改designer.cs文件,因为在对设计器进行下一次更改后,将自动重新创建该文件。要创建它,只需右键单击数据集并选择“显示代码”

例如(假设
TableAdapter
命名为
ProductTableAdapter
):

现在,您可以轻松更改它:

var productTableAdapter = new DataSet1TableAdapters.ProductTableAdapter();
productTableAdapter.ConnectionString = someOtherConnectionString;
下面是我的示例数据集和创建的文件
DataSet1.cs


实际上有一种更简单的方法来更改连接字符串。 转到设置屏幕,其中连接字符串显示为连接字符串。 首先标记并复制显示的连接字符串。 然后将类型从连接字符串更改为字符串。字符串的文本将更改为包含xml。 然后将复制的连接字符串粘贴到xml文本上。 然后将范围从应用程序更改为用户

当我想更改连接字符串时,我使用以下代码

// assign the path to use to the variable fullpath (or whatever)
string newConnection = String.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0}", fullpath);            
Properties.Settings.Default.HootConnectionString = newConnection;
Properties.Settings.Default.Save();
在我的例子中,我有一个全局数据集处于活动状态,因此我必须让tableadapter重新读取数据。当然,您必须添加错误控制以确保数据库仍然存在

您会注意到,这不会更改应用程序设置中显示的内容。这些都是默认值

这适用于Access数据库;因此,您的里程数和要求可能会有所不同


编辑:警告。事实证明,安装连接字符串后,可以很好地打开和读取数据库内容,但它会抱怨在尝试更新数据库时没有连接字符串

你什么意思?你的意思是你想在运行时从一个连接开始读取,然后在读的中间切换连接?你应该注意到你是指通过DeSung创建的一个强类型的数据集。谢谢提姆的帮助。当我试图添加代码连接时,找不到连接。@user1304232:那么您是否创建了一个与数据集设计器同名的类?
partial
属性和正确的命名空间很重要。如果不确定它们的名称,请查看
…designer.cs
文件。编辑我的答案以显示屏幕截图。明白了。这就是我需要的。谢谢
// assign the path to use to the variable fullpath (or whatever)
string newConnection = String.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0}", fullpath);            
Properties.Settings.Default.HootConnectionString = newConnection;
Properties.Settings.Default.Save();