SqlConnectionStringBuilder的ApplicationName属性设置不生效问题排查
问题原因与解决办法
这完全是属性设置顺序导致的问题,和SqlConnectionStringBuilder本身无关——你不小心用后续的连接字符串覆盖了之前设置的自定义应用名称。
具体原因
当你给SqlConnectionStringBuilder.ConnectionString赋值时,这个操作会完整解析传入的字符串,然后重置Builder内部的所有配置项:
- 如果传入的字符串里没有某个参数(比如你这里的
Application Name),Builder会把该参数重置为默认值; - 你先设置了
.ApplicationName = "My App Name",紧接着就用一个不包含应用名称的连接字符串覆盖了整个Builder的配置,所以自定义名称直接被冲没,回到了默认的.Net Sql Client Data Provider。
两种解决方式
方式一:调整属性设置顺序
先初始化基础连接字符串,再设置自定义属性(包括应用名称),这样后续的设置不会被覆盖:
Dim ConnectionBuilder As New SqlConnectionStringBuilder With ConnectionBuilder .ConnectionString = $"Server={SQLServerNameAndIstance};Database={TargetDB}" .ApplicationName = "My App Name" ' 现在设置会覆盖默认值 .UserID = ConnectionUser .Password = ConnectionPassword .Pooling = True .WorkstationID = ClientID End With ConnectionString = ConnectionBuilder.ToString
方式二:使用强类型属性逐个配置(推荐)
完全跳过拼接初始连接字符串的步骤,直接使用SqlConnectionStringBuilder提供的强类型属性来配置所有参数,这样更清晰也不容易出错:
Dim ConnectionBuilder As New SqlConnectionStringBuilder With ConnectionBuilder .ApplicationName = "My App Name" .DataSource = SQLServerNameAndIstance ' 对应连接字符串里的Server参数 .InitialCatalog = TargetDB ' 对应连接字符串里的Database参数 .UserID = ConnectionUser .Password = ConnectionPassword .Pooling = True .WorkstationID = ClientID End With ConnectionString = ConnectionBuilder.ToString
内容的提问来源于stack exchange,提问作者IFrank
相关产品推荐
相关产品推荐

