如何在运行时以编程方式从本地数据库获取连接字符串?时间:2019-06-01 标签:c#winforms

Posted

技术标签:

【中文标题】如何在运行时以编程方式从本地数据库获取连接字符串?时间:2019-06-01 标签:c#winforms【英文标题】:how to programmatically get connection string from local database at run time? c# winforms 【发布时间】:2022-01-20 04:06:07 【问题描述】:

我已经使用 Winforms (c#) 以编程方式创建了一个本地数据库,并向其中添加了表、存储过程,并存储在用户的首选位置。现在,我只想让我的 Winforms 应用程序使用它来访问它,而无需打开 Visual Studio 或 SSMS 来获取该数据库的连接字符串。

我的尝试: 我确实打开了 Visual Studio 以获取数据库的连接字符串以将其添加到 WinForms 应用程序的连接字符串中,并且我想用它进行交易。

有没有办法以编程方式从 Winforms 应用程序中检索用户选择的数据库的连接字符串?

喜欢,

    用户从他的 WinForms 应用程序中选择已创建的 localdatabase.mdf 的位置。 应用程序检索连接字符串,以便他可以使用它连接到数据库。

检索可以是仅检索数据库的Data Source 等部分。我可以设法用它建立连接字符串。就像使用 Initial Catalog 的文件名并使用字符串添加 Integrated security

有关此的任何想法都会有所帮助。谢谢各位。

【问题讨论】:

所以你想在连接到数据库之前从数据库中查询一些东西......?这有意义吗?或者我在这里误解了什么......?连接字符串是访问的关键,所以你需要知道它。它有一个模式,替换其中的变量,如 DB-Location、Security 等,一切顺利 @dba,我创建了位于master 的数据库,该数据库具有连接字符串=>Server=localhost;Integrated security=SSPI;database=master,之后我想连接到创建的具有Data Source=(LocalDB)\MSSQLLocalDB;Initial Catalog=MyAppDatabase.mdf;Integrated Security=True 连接字符串的localDB。但是为此,我无法获取应用程序以编程方式创建的本地数据库的连接字符串,因为该应用程序将不在任何 IDE(已发布)下,并且它应该能够在不使用任何 IDE 的情况下获取连接字符串,因为用户是非技术人员。所以,希望你能理解 为什么你认为 LocalDB 是只存在于 Visual Studio 中的东西? docs.microsoft.com/en-us/sql/database-engine/configure-windows/… @Caius Jard 是的,我指的是 LocalDB 的任何 IDE 或 SSMS。应用程序本身从数据库中获取连接字符串,该连接字符串由同一应用程序以编程方式创建,并被使用并保持连接以进行进一步的交易。 【参考方案1】:

您可以使用SqlConnectionStringBuilder Class 获取和编辑连接字符串。

这里的连接字符串是方法本地的,但在下面的方法范围内的任何地方。

public static void ChangeConnectionStringFromExisting()


    var connectionString = "Server=localhost;Integrated security=SSPI;database=master";

    var builder = new SqlConnectionStringBuilder(connectionString);

    builder.DataSource = "(LocalDB)\\MSSQLLocalDB";
    builder.InitialCatalog = "MyAppDatabase.mdf";

    connectionString = builder.ConnectionString;

    using (var cn = new SqlConnection(connectionString))
    
        // . . .
    


【讨论】:

如果数据库在Primary,你能指定如何获取DataSource吗? @KarenPayne 即使数据库是以编程方式创建为 localdb,我也无法像 service-based database 那样访问它。它显示异常为=>无法打开登录请求的数据库“C:\MyAppDatabase.mdf”。登录失败。用户 'OpusCorpus\OpusCorpus 登录失败 试试这个连接字符串,将 databaseLocation 替换为 mdf 的完整路径 - 用户通过您的应用选择 -$@"Data Source=(localdb)\MSSQLLocalDB; AttachDbFilename=databaseLocation; Integrated Security=True; Connect Timeout=30"

以上是关于如何在运行时以编程方式从本地数据库获取连接字符串?时间:2019-06-01 标签:c#winforms的主要内容,如果未能解决你的问题,请参考以下文章

如何在运行 asp.net 页面时以编程方式设置表格背景?

如何在运行时以编程方式计算应用 ID?

如何在其他呼叫运行时以编程方式合并呼叫(电话会议)

如何在启动时以编程方式禁用 Spring @JmsListener

在运行时以编程方式激活约束

iOS如何在弹出顶视图控制器时以编程方式检测?