更改每个用户的数据源

Change DataSource with each user

提问人:Ace Avl 提问时间:10/6/2023 最后编辑:Ace Avl 更新时间:10/7/2023 访问量:69

问:

下午好

当我创建一个 DataSource 时,它要求提供凭据并将其保存到 app.config:

<add name="XXXXXCS" connectionString="Data Source=SERVER;Initial Catalog=XXX;Persist Security Info=True;User ID=XXXXX;Password=XXXXX"
providerName="System.Data.SqlClient" />

但是我需要根据登录应用程序的人更改用户和密码。 这是因为服务器对每个用户都有限制,他们需要使用各自的凭据登录 SQL。

有没有办法做到这一点?

感谢您的帮助!

-------------编辑-----------

我知道如何从app.config获取连接字符串, 我不知道的是如何将其签名到数据源。

这是我一直在使用的:

ConfigurationManager.ConnectionStrings(xxxxxx).ConnectionString

Using myConn = New SqlConnection(CadenaConexion)
    myConn.Open()
    Using comm As New SqlCommand("QUERY xxxx", myConn)
            Dim adapter As New SqlDataAdapter(comm)
            Dim table As New DataTable
            adapter.Fill(table)
        dgv1.DataSource = table
    End Using
    myConn.Close()
End Using

但是现在我想更改为绑定,我该如何实际更改数据源连接字符串?

.NET vb.net Visual-Studio WinForms

评论

0赞 jmcilhinney 10/6/2023
可以将默认连接字符串存储在配置文件中,无论是否使用凭据。在代码中,将默认连接字符串读入连接字符串生成器,设置用户凭据,从生成器获取新的连接字符串,并将其传递给连接对象。查看课程以提供帮助。SqlConnectionStringBuilder
0赞 Ace Avl 10/7/2023
谢谢 jmcilhinney,我编辑了我的问题,所以它更清楚。
0赞 jmcilhinney 10/7/2023
我确切地告诉了你该怎么做。目前,你正在从配置文件中获取连接字符串,并将其传递给连接对象。正如我已经告诉过你的那样,将该连接字符串传递给连接字符串生成器,设置相应的属性,获取新的连接字符串并将其传递给连接。
0赞 Ace Avl 10/8/2023
谢谢,我正在更改表适配器中的连接字符串,如下所示:在每个适配器中,但我希望能够直接对数据源执行此操作,因此我不必在每个适配器中执行此操作。Me.TableAdapter.Connection.ConnectionString = ConnectionString()
0赞 jmcilhinney 10/8/2023
为此,必须更改表适配器类的代码。您当然可以添加一个分部类来添加或更改某些行为,但我不知道是否有办法更改设置连接字符串的默认行为。例如,可以添加一个构造函数,该构造函数允许您指定是使用默认连接字符串还是使用用户提供的凭据,然后使用该构造函数而不是默认构造函数。然后,您已将我描述的功能构建到该构造函数中。

答:

0赞 SSS 10/6/2023 #1

使用连接字符串

Data Source=SERVER;Initial Catalog=XXX;Persist Security Info=True;Integrated Security=True

评论

1赞 HardCode 10/7/2023
这不适用于使用 SQL Server 用户帐户登录的人,情况似乎是这样(但 OP 并不完全清楚)。
0赞 Jiachen Li-MSFT 10/6/2023 #2

可以使用 SqlConnectionStringBuilder动态生成连接字符串。

        Dim builder As New SqlConnectionStringBuilder()

    builder.ConnectionString =
        "server=(local);user id=defultID;" &
        "password=defultPassword;initial catalog=AdventureWorks"
    builder.UserID = "newuser"
    builder.Password = "newPassword"

评论

0赞 Ace Avl 10/7/2023
谢谢Jiachen Li-MSFT,我编辑了我的问题,所以它更清晰。
0赞 Jiachen Li-MSFT 10/17/2023
您的意思是使用 BindingSource 类来封装数据源吗?