4

我正在尝试编写一个应用程序,让用户连接到任意数据库,假设他们有正确的 ODBC 驱动程序。但是,我被困在连接字符串上。对于任何特定的数据库类型,很容易在网上查找并找到需要哪些关键字/值对,但是驱动程序本身是否可以访问这些信息?

我想做的是让用户从列表(由 SQLDrivers 生成)中选择他们想要的驱动程序,然后生成一个表单,提示他们输入生成字符串所需的关键字,这样我的应用程序就不需要知道特定的 ODBC 驱动程序。有没有办法做到这一点?还是我必须分别对每一个支持进行硬编码?也许连接字符串不是要走的路,还有另一种我忽略的方法?

4

4 回答 4

3

2010 年微软发布了 VS2010 Connection 对话框供我们小人物使用。它很棒,应该做你想做的,并且可以自由分发。可以在此处找到对话框及其源代码的下载。

为了让您开始:一旦您编译了代码,您将需要包含对Microsoft.Data.ConnectionUIMicrosoft.Data.ConnectionUI.Dialog的引用Microsoft.Data.ConnectionUI.SqlCeDataProvider。然后调用该对话框

// Initialisation.
DataConnectionDialog dcd = new DataConnectionDialog();
DataConnectionConfiguration dcs = new DataConnectionConfiguration(null);
dcs.LoadConfiguration(dcd);

// Edit existing connection string.
if (!String.IsNullOrEmpty(strExistingConn))    
    dcd.ConnectionString = strExistingConn;

// Launch Microsoft's SqlConnection dialog.
string strSqlFinConn = String.Empty;
if (DataConnectionDialog.Show(dcd) == DialogResult.OK)
{
    // Load tables as test.
    using (SqlConnection connection = new SqlConnection(dcd.ConnectionString))
        connection.Open();
}
dcs.SaveConfiguration(dcd);
return dcd.ConnectionString;

如果这不是您想要的,那么@HackedByChinese 的答案似乎是最好的方法。

我希望这有帮助。

于 2012-06-20T18:16:15.753 回答
3

你可以看看ConnectionStringBuilders他们是否有帮助。

您可以使用以下代码枚举可配置属性,这将允许您创建配置表单。

var builder = new SqlConnectionStringBuilder();

var properties = (from key in builder.Keys.OfType<string>()
                  select key);

properties包含:

Data Source 
Failover Partner 
AttachDbFilename 
Initial Catalog 
Integrated Security 
Persist Security Info 
User ID 
Password 
Enlist 
Pooling 
Min Pool Size 
Max Pool Size 
Asynchronous Processing 
Connection Reset 
MultipleActiveResultSets 
Replication 
Connect Timeout 
Encrypt 
TrustServerCertificate 
Load Balance Timeout 
Network Library 
Packet Size 
Type System Version 
Application Name 
Current Language 
Workstation ID 
User Instance 
Context Connection 
Transaction Binding 
于 2012-06-20T18:01:41.810 回答
1

实际上,我在http://msdn.microsoft.com/en-us/library/windows/desktop/ms715433(v=vs.85).aspx找到了一种非常简单的方法来解决这个问题。

如果您使用不完整的连接字符串(例如,仅包含 Driver 关键字的连接字符串)调用 ODBC API 函数 SQLDriverConnect 并将最后一个参数设置为 SQL_DRIVER_COMPLETE,它将弹出一个由驱动程序生成的对话框,提示输入任何未包含的必需信息,然后在关闭后返回完成的连接字符串。

于 2012-06-21T02:26:09.547 回答
0

除了已经发布的好的答案之外,您可能还想看看 ODBC API SQLBrowseConnect

于 2012-06-21T07:47:32.033 回答