SqlConnectionStringBuilder.cs 70 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406
  1. //------------------------------------------------------------------------------
  2. // <copyright file="SqlConnectionStringBuilder.cs" company="Microsoft">
  3. // Copyright (c) Microsoft Corporation. All rights reserved.
  4. // </copyright>
  5. // <owner current="true" primary="true">[....]</owner>
  6. // <owner current="true" primary="false">[....]</owner>
  7. //------------------------------------------------------------------------------
  8. using System;
  9. using System.Collections;
  10. using System.Collections.Generic;
  11. using System.ComponentModel;
  12. using System.Data;
  13. using System.Data.Common;
  14. using System.Diagnostics;
  15. using System.Globalization;
  16. using System.Runtime.Serialization;
  17. using System.Security.Permissions;
  18. using System.Text;
  19. using System.Diagnostics.CodeAnalysis;
  20. namespace System.Data.SqlClient {
  21. [DefaultProperty("DataSource")]
  22. [System.ComponentModel.TypeConverterAttribute(typeof(SqlConnectionStringBuilder.SqlConnectionStringBuilderConverter))]
  23. public sealed class SqlConnectionStringBuilder : DbConnectionStringBuilder {
  24. private enum Keywords { // specific ordering for ConnectionString output construction
  25. // NamedConnection,
  26. DataSource,
  27. FailoverPartner,
  28. AttachDBFilename,
  29. InitialCatalog,
  30. IntegratedSecurity,
  31. PersistSecurityInfo,
  32. UserID,
  33. Password,
  34. Enlist,
  35. Pooling,
  36. MinPoolSize,
  37. MaxPoolSize,
  38. AsynchronousProcessing,
  39. ConnectionReset,
  40. MultipleActiveResultSets,
  41. Replication,
  42. ConnectTimeout,
  43. Encrypt,
  44. TrustServerCertificate,
  45. LoadBalanceTimeout,
  46. NetworkLibrary,
  47. PacketSize,
  48. TypeSystemVersion,
  49. Authentication,
  50. ApplicationName,
  51. CurrentLanguage,
  52. WorkstationID,
  53. UserInstance,
  54. ContextConnection,
  55. TransactionBinding,
  56. ApplicationIntent,
  57. MultiSubnetFailover,
  58. TransparentNetworkIPResolution,
  59. ConnectRetryCount,
  60. ConnectRetryInterval,
  61. ColumnEncryptionSetting,
  62. // keep the count value last
  63. KeywordsCount
  64. }
  65. internal const int KeywordsCount = (int)Keywords.KeywordsCount;
  66. private static readonly string[] _validKeywords;
  67. private static readonly Dictionary<string,Keywords> _keywords;
  68. private ApplicationIntent _applicationIntent = DbConnectionStringDefaults.ApplicationIntent;
  69. private string _applicationName = DbConnectionStringDefaults.ApplicationName;
  70. private string _attachDBFilename = DbConnectionStringDefaults.AttachDBFilename;
  71. private string _currentLanguage = DbConnectionStringDefaults.CurrentLanguage;
  72. private string _dataSource = DbConnectionStringDefaults.DataSource;
  73. private string _failoverPartner = DbConnectionStringDefaults.FailoverPartner;
  74. private string _initialCatalog = DbConnectionStringDefaults.InitialCatalog;
  75. // private string _namedConnection = DbConnectionStringDefaults.NamedConnection;
  76. private string _networkLibrary = DbConnectionStringDefaults.NetworkLibrary;
  77. private string _password = DbConnectionStringDefaults.Password;
  78. private string _transactionBinding = DbConnectionStringDefaults.TransactionBinding;
  79. private string _typeSystemVersion = DbConnectionStringDefaults.TypeSystemVersion;
  80. private string _userID = DbConnectionStringDefaults.UserID;
  81. private string _workstationID = DbConnectionStringDefaults.WorkstationID;
  82. private int _connectTimeout = DbConnectionStringDefaults.ConnectTimeout;
  83. private int _loadBalanceTimeout = DbConnectionStringDefaults.LoadBalanceTimeout;
  84. private int _maxPoolSize = DbConnectionStringDefaults.MaxPoolSize;
  85. private int _minPoolSize = DbConnectionStringDefaults.MinPoolSize;
  86. private int _packetSize = DbConnectionStringDefaults.PacketSize;
  87. private int _connectRetryCount = DbConnectionStringDefaults.ConnectRetryCount;
  88. private int _connectRetryInterval = DbConnectionStringDefaults.ConnectRetryInterval;
  89. private bool _asynchronousProcessing = DbConnectionStringDefaults.AsynchronousProcessing;
  90. private bool _connectionReset = DbConnectionStringDefaults.ConnectionReset;
  91. private bool _contextConnection = DbConnectionStringDefaults.ContextConnection;
  92. private bool _encrypt = DbConnectionStringDefaults.Encrypt;
  93. private bool _trustServerCertificate = DbConnectionStringDefaults.TrustServerCertificate;
  94. private bool _enlist = DbConnectionStringDefaults.Enlist;
  95. private bool _integratedSecurity = DbConnectionStringDefaults.IntegratedSecurity;
  96. private bool _multipleActiveResultSets = DbConnectionStringDefaults.MultipleActiveResultSets;
  97. private bool _multiSubnetFailover = DbConnectionStringDefaults.MultiSubnetFailover;
  98. private bool _transparentNetworkIPResolution= DbConnectionStringDefaults.TransparentNetworkIPResolution;
  99. private bool _persistSecurityInfo = DbConnectionStringDefaults.PersistSecurityInfo;
  100. private bool _pooling = DbConnectionStringDefaults.Pooling;
  101. private bool _replication = DbConnectionStringDefaults.Replication;
  102. private bool _userInstance = DbConnectionStringDefaults.UserInstance;
  103. private SqlAuthenticationMethod _authentication = DbConnectionStringDefaults.Authentication;
  104. private SqlConnectionColumnEncryptionSetting _columnEncryptionSetting = DbConnectionStringDefaults.ColumnEncryptionSetting;
  105. static SqlConnectionStringBuilder() {
  106. string[] validKeywords = new string[KeywordsCount];
  107. validKeywords[(int)Keywords.ApplicationIntent] = DbConnectionStringKeywords.ApplicationIntent;
  108. validKeywords[(int)Keywords.ApplicationName] = DbConnectionStringKeywords.ApplicationName;
  109. validKeywords[(int)Keywords.AsynchronousProcessing] = DbConnectionStringKeywords.AsynchronousProcessing;
  110. validKeywords[(int)Keywords.AttachDBFilename] = DbConnectionStringKeywords.AttachDBFilename;
  111. validKeywords[(int)Keywords.ConnectionReset] = DbConnectionStringKeywords.ConnectionReset;
  112. validKeywords[(int)Keywords.ContextConnection] = DbConnectionStringKeywords.ContextConnection;
  113. validKeywords[(int)Keywords.ConnectTimeout] = DbConnectionStringKeywords.ConnectTimeout;
  114. validKeywords[(int)Keywords.CurrentLanguage] = DbConnectionStringKeywords.CurrentLanguage;
  115. validKeywords[(int)Keywords.DataSource] = DbConnectionStringKeywords.DataSource;
  116. validKeywords[(int)Keywords.Encrypt] = DbConnectionStringKeywords.Encrypt;
  117. validKeywords[(int)Keywords.Enlist] = DbConnectionStringKeywords.Enlist;
  118. validKeywords[(int)Keywords.FailoverPartner] = DbConnectionStringKeywords.FailoverPartner;
  119. validKeywords[(int)Keywords.InitialCatalog] = DbConnectionStringKeywords.InitialCatalog;
  120. validKeywords[(int)Keywords.IntegratedSecurity] = DbConnectionStringKeywords.IntegratedSecurity;
  121. validKeywords[(int)Keywords.LoadBalanceTimeout] = DbConnectionStringKeywords.LoadBalanceTimeout;
  122. validKeywords[(int)Keywords.MaxPoolSize] = DbConnectionStringKeywords.MaxPoolSize;
  123. validKeywords[(int)Keywords.MinPoolSize] = DbConnectionStringKeywords.MinPoolSize;
  124. validKeywords[(int)Keywords.MultipleActiveResultSets] = DbConnectionStringKeywords.MultipleActiveResultSets;
  125. validKeywords[(int)Keywords.MultiSubnetFailover] = DbConnectionStringKeywords.MultiSubnetFailover;
  126. validKeywords[(int)Keywords.TransparentNetworkIPResolution] = DbConnectionStringKeywords.TransparentNetworkIPResolution;
  127. // validKeywords[(int)Keywords.NamedConnection] = DbConnectionStringKeywords.NamedConnection;
  128. validKeywords[(int)Keywords.NetworkLibrary] = DbConnectionStringKeywords.NetworkLibrary;
  129. validKeywords[(int)Keywords.PacketSize] = DbConnectionStringKeywords.PacketSize;
  130. validKeywords[(int)Keywords.Password] = DbConnectionStringKeywords.Password;
  131. validKeywords[(int)Keywords.PersistSecurityInfo] = DbConnectionStringKeywords.PersistSecurityInfo;
  132. validKeywords[(int)Keywords.Pooling] = DbConnectionStringKeywords.Pooling;
  133. validKeywords[(int)Keywords.Replication] = DbConnectionStringKeywords.Replication;
  134. validKeywords[(int)Keywords.TransactionBinding] = DbConnectionStringKeywords.TransactionBinding;
  135. validKeywords[(int)Keywords.TrustServerCertificate] = DbConnectionStringKeywords.TrustServerCertificate;
  136. validKeywords[(int)Keywords.TypeSystemVersion] = DbConnectionStringKeywords.TypeSystemVersion;
  137. validKeywords[(int)Keywords.UserID] = DbConnectionStringKeywords.UserID;
  138. validKeywords[(int)Keywords.UserInstance] = DbConnectionStringKeywords.UserInstance;
  139. validKeywords[(int)Keywords.WorkstationID] = DbConnectionStringKeywords.WorkstationID;
  140. validKeywords[(int)Keywords.ConnectRetryCount] = DbConnectionStringKeywords.ConnectRetryCount;
  141. validKeywords[(int)Keywords.ConnectRetryInterval] = DbConnectionStringKeywords.ConnectRetryInterval;
  142. validKeywords[(int)Keywords.Authentication] = DbConnectionStringKeywords.Authentication;
  143. validKeywords[(int)Keywords.ColumnEncryptionSetting] = DbConnectionStringKeywords.ColumnEncryptionSetting;
  144. _validKeywords = validKeywords;
  145. Dictionary<string, Keywords> hash = new Dictionary<string, Keywords>(KeywordsCount + SqlConnectionString.SynonymCount, StringComparer.OrdinalIgnoreCase);
  146. hash.Add(DbConnectionStringKeywords.ApplicationIntent, Keywords.ApplicationIntent);
  147. hash.Add(DbConnectionStringKeywords.ApplicationName, Keywords.ApplicationName);
  148. hash.Add(DbConnectionStringKeywords.AsynchronousProcessing, Keywords.AsynchronousProcessing);
  149. hash.Add(DbConnectionStringKeywords.AttachDBFilename, Keywords.AttachDBFilename);
  150. hash.Add(DbConnectionStringKeywords.ConnectTimeout, Keywords.ConnectTimeout);
  151. hash.Add(DbConnectionStringKeywords.ConnectionReset, Keywords.ConnectionReset);
  152. hash.Add(DbConnectionStringKeywords.ContextConnection, Keywords.ContextConnection);
  153. hash.Add(DbConnectionStringKeywords.CurrentLanguage, Keywords.CurrentLanguage);
  154. hash.Add(DbConnectionStringKeywords.DataSource, Keywords.DataSource);
  155. hash.Add(DbConnectionStringKeywords.Encrypt, Keywords.Encrypt);
  156. hash.Add(DbConnectionStringKeywords.Enlist, Keywords.Enlist);
  157. hash.Add(DbConnectionStringKeywords.FailoverPartner, Keywords.FailoverPartner);
  158. hash.Add(DbConnectionStringKeywords.InitialCatalog, Keywords.InitialCatalog);
  159. hash.Add(DbConnectionStringKeywords.IntegratedSecurity, Keywords.IntegratedSecurity);
  160. hash.Add(DbConnectionStringKeywords.LoadBalanceTimeout, Keywords.LoadBalanceTimeout);
  161. hash.Add(DbConnectionStringKeywords.MultipleActiveResultSets, Keywords.MultipleActiveResultSets);
  162. hash.Add(DbConnectionStringKeywords.MaxPoolSize, Keywords.MaxPoolSize);
  163. hash.Add(DbConnectionStringKeywords.MinPoolSize, Keywords.MinPoolSize);
  164. hash.Add(DbConnectionStringKeywords.MultiSubnetFailover, Keywords.MultiSubnetFailover);
  165. hash.Add(DbConnectionStringKeywords.TransparentNetworkIPResolution, Keywords.TransparentNetworkIPResolution);
  166. // hash.Add(DbConnectionStringKeywords.NamedConnection, Keywords.NamedConnection);
  167. hash.Add(DbConnectionStringKeywords.NetworkLibrary, Keywords.NetworkLibrary);
  168. hash.Add(DbConnectionStringKeywords.PacketSize, Keywords.PacketSize);
  169. hash.Add(DbConnectionStringKeywords.Password, Keywords.Password);
  170. hash.Add(DbConnectionStringKeywords.PersistSecurityInfo, Keywords.PersistSecurityInfo);
  171. hash.Add(DbConnectionStringKeywords.Pooling, Keywords.Pooling);
  172. hash.Add(DbConnectionStringKeywords.Replication, Keywords.Replication);
  173. hash.Add(DbConnectionStringKeywords.TransactionBinding, Keywords.TransactionBinding);
  174. hash.Add(DbConnectionStringKeywords.TrustServerCertificate, Keywords.TrustServerCertificate);
  175. hash.Add(DbConnectionStringKeywords.TypeSystemVersion, Keywords.TypeSystemVersion);
  176. hash.Add(DbConnectionStringKeywords.UserID, Keywords.UserID);
  177. hash.Add(DbConnectionStringKeywords.UserInstance, Keywords.UserInstance);
  178. hash.Add(DbConnectionStringKeywords.WorkstationID, Keywords.WorkstationID);
  179. hash.Add(DbConnectionStringKeywords.ConnectRetryCount, Keywords.ConnectRetryCount);
  180. hash.Add(DbConnectionStringKeywords.ConnectRetryInterval, Keywords.ConnectRetryInterval);
  181. hash.Add(DbConnectionStringKeywords.Authentication, Keywords.Authentication);
  182. hash.Add(DbConnectionStringKeywords.ColumnEncryptionSetting, Keywords.ColumnEncryptionSetting);
  183. hash.Add(DbConnectionStringSynonyms.APP, Keywords.ApplicationName);
  184. hash.Add(DbConnectionStringSynonyms.Async, Keywords.AsynchronousProcessing);
  185. hash.Add(DbConnectionStringSynonyms.EXTENDEDPROPERTIES, Keywords.AttachDBFilename);
  186. hash.Add(DbConnectionStringSynonyms.INITIALFILENAME, Keywords.AttachDBFilename);
  187. hash.Add(DbConnectionStringSynonyms.CONNECTIONTIMEOUT, Keywords.ConnectTimeout);
  188. hash.Add(DbConnectionStringSynonyms.TIMEOUT, Keywords.ConnectTimeout);
  189. hash.Add(DbConnectionStringSynonyms.LANGUAGE, Keywords.CurrentLanguage);
  190. hash.Add(DbConnectionStringSynonyms.ADDR, Keywords.DataSource);
  191. hash.Add(DbConnectionStringSynonyms.ADDRESS, Keywords.DataSource);
  192. hash.Add(DbConnectionStringSynonyms.NETWORKADDRESS, Keywords.DataSource);
  193. hash.Add(DbConnectionStringSynonyms.SERVER, Keywords.DataSource);
  194. hash.Add(DbConnectionStringSynonyms.DATABASE, Keywords.InitialCatalog);
  195. hash.Add(DbConnectionStringSynonyms.TRUSTEDCONNECTION, Keywords.IntegratedSecurity);
  196. hash.Add(DbConnectionStringSynonyms.ConnectionLifetime, Keywords.LoadBalanceTimeout);
  197. hash.Add(DbConnectionStringSynonyms.NET, Keywords.NetworkLibrary);
  198. hash.Add(DbConnectionStringSynonyms.NETWORK, Keywords.NetworkLibrary);
  199. hash.Add(DbConnectionStringSynonyms.Pwd, Keywords.Password);
  200. hash.Add(DbConnectionStringSynonyms.PERSISTSECURITYINFO, Keywords.PersistSecurityInfo);
  201. hash.Add(DbConnectionStringSynonyms.UID, Keywords.UserID);
  202. hash.Add(DbConnectionStringSynonyms.User, Keywords.UserID);
  203. hash.Add(DbConnectionStringSynonyms.WSID, Keywords.WorkstationID);
  204. Debug.Assert((KeywordsCount + SqlConnectionString.SynonymCount) == hash.Count, "initial expected size is incorrect");
  205. _keywords = hash;
  206. }
  207. public SqlConnectionStringBuilder() : this((string)null) {
  208. }
  209. public SqlConnectionStringBuilder(string connectionString) : base() {
  210. if (!ADP.IsEmpty(connectionString)) {
  211. ConnectionString = connectionString;
  212. }
  213. }
  214. public override object this[string keyword] {
  215. get {
  216. Keywords index = GetIndex(keyword);
  217. return GetAt(index);
  218. }
  219. set {
  220. if (null != value) {
  221. Keywords index = GetIndex(keyword);
  222. switch(index) {
  223. case Keywords.ApplicationIntent: this.ApplicationIntent = ConvertToApplicationIntent(keyword, value); break;
  224. case Keywords.ApplicationName: ApplicationName = ConvertToString(value); break;
  225. case Keywords.AttachDBFilename: AttachDBFilename = ConvertToString(value); break;
  226. case Keywords.CurrentLanguage: CurrentLanguage = ConvertToString(value); break;
  227. case Keywords.DataSource: DataSource = ConvertToString(value); break;
  228. case Keywords.FailoverPartner: FailoverPartner = ConvertToString(value); break;
  229. case Keywords.InitialCatalog: InitialCatalog = ConvertToString(value); break;
  230. // case Keywords.NamedConnection: NamedConnection = ConvertToString(value); break;
  231. case Keywords.NetworkLibrary: NetworkLibrary = ConvertToString(value); break;
  232. case Keywords.Password: Password = ConvertToString(value); break;
  233. case Keywords.UserID: UserID = ConvertToString(value); break;
  234. case Keywords.TransactionBinding: TransactionBinding = ConvertToString(value); break;
  235. case Keywords.TypeSystemVersion: TypeSystemVersion = ConvertToString(value); break;
  236. case Keywords.WorkstationID: WorkstationID = ConvertToString(value); break;
  237. case Keywords.ConnectTimeout: ConnectTimeout = ConvertToInt32(value); break;
  238. case Keywords.LoadBalanceTimeout: LoadBalanceTimeout = ConvertToInt32(value); break;
  239. case Keywords.MaxPoolSize: MaxPoolSize = ConvertToInt32(value); break;
  240. case Keywords.MinPoolSize: MinPoolSize = ConvertToInt32(value); break;
  241. case Keywords.PacketSize: PacketSize = ConvertToInt32(value); break;
  242. case Keywords.IntegratedSecurity: IntegratedSecurity = ConvertToIntegratedSecurity(value); break;
  243. case Keywords.Authentication: Authentication = ConvertToAuthenticationType(keyword, value); break;
  244. case Keywords.ColumnEncryptionSetting: ColumnEncryptionSetting = ConvertToColumnEncryptionSetting(keyword, value); break;
  245. case Keywords.AsynchronousProcessing: AsynchronousProcessing = ConvertToBoolean(value); break;
  246. #pragma warning disable 618 // Obsolete ConnectionReset
  247. case Keywords.ConnectionReset: ConnectionReset = ConvertToBoolean(value); break;
  248. #pragma warning restore 618
  249. case Keywords.ContextConnection: ContextConnection = ConvertToBoolean(value); break;
  250. case Keywords.Encrypt: Encrypt = ConvertToBoolean(value); break;
  251. case Keywords.TrustServerCertificate: TrustServerCertificate = ConvertToBoolean(value); break;
  252. case Keywords.Enlist: Enlist = ConvertToBoolean(value); break;
  253. case Keywords.MultipleActiveResultSets: MultipleActiveResultSets = ConvertToBoolean(value); break;
  254. case Keywords.MultiSubnetFailover: MultiSubnetFailover = ConvertToBoolean(value); break;
  255. case Keywords.TransparentNetworkIPResolution: TransparentNetworkIPResolution = ConvertToBoolean(value); break;
  256. case Keywords.PersistSecurityInfo: PersistSecurityInfo = ConvertToBoolean(value); break;
  257. case Keywords.Pooling: Pooling = ConvertToBoolean(value); break;
  258. case Keywords.Replication: Replication = ConvertToBoolean(value); break;
  259. case Keywords.UserInstance: UserInstance = ConvertToBoolean(value); break;
  260. case Keywords.ConnectRetryCount: ConnectRetryCount = ConvertToInt32(value); break;
  261. case Keywords.ConnectRetryInterval: ConnectRetryInterval = ConvertToInt32(value); break;
  262. default:
  263. Debug.Assert(false, "unexpected keyword");
  264. throw ADP.KeywordNotSupported(keyword);
  265. }
  266. }
  267. else {
  268. Remove(keyword);
  269. }
  270. }
  271. }
  272. [DisplayName(DbConnectionStringKeywords.ApplicationIntent)]
  273. [ResCategoryAttribute(Res.DataCategory_Initialization)]
  274. [ResDescriptionAttribute(Res.DbConnectionString_ApplicationIntent)]
  275. [RefreshPropertiesAttribute(RefreshProperties.All)]
  276. public ApplicationIntent ApplicationIntent {
  277. get { return _applicationIntent; }
  278. set {
  279. if (!DbConnectionStringBuilderUtil.IsValidApplicationIntentValue(value)) {
  280. throw ADP.InvalidEnumerationValue(typeof(ApplicationIntent), (int)value);
  281. }
  282. SetApplicationIntentValue(value);
  283. _applicationIntent = value;
  284. }
  285. }
  286. [DisplayName(DbConnectionStringKeywords.ApplicationName)]
  287. [ResCategoryAttribute(Res.DataCategory_Context)]
  288. [ResDescriptionAttribute(Res.DbConnectionString_ApplicationName)]
  289. [RefreshPropertiesAttribute(RefreshProperties.All)]
  290. public string ApplicationName {
  291. get { return _applicationName; }
  292. set {
  293. SetValue(DbConnectionStringKeywords.ApplicationName, value);
  294. _applicationName = value;
  295. }
  296. }
  297. [DisplayName(DbConnectionStringKeywords.AsynchronousProcessing)]
  298. [ResCategoryAttribute(Res.DataCategory_Initialization)]
  299. [ResDescriptionAttribute(Res.DbConnectionString_AsynchronousProcessing)]
  300. [RefreshPropertiesAttribute(RefreshProperties.All)]
  301. public bool AsynchronousProcessing {
  302. get { return _asynchronousProcessing; }
  303. set {
  304. SetValue(DbConnectionStringKeywords.AsynchronousProcessing, value);
  305. _asynchronousProcessing = value;
  306. }
  307. }
  308. [DisplayName(DbConnectionStringKeywords.AttachDBFilename)]
  309. [ResCategoryAttribute(Res.DataCategory_Source)]
  310. [ResDescriptionAttribute(Res.DbConnectionString_AttachDBFilename)]
  311. [RefreshPropertiesAttribute(RefreshProperties.All)]
  312. //
  313. [Editor("System.Windows.Forms.Design.FileNameEditor, " + AssemblyRef.SystemDesign, "System.Drawing.Design.UITypeEditor, " + AssemblyRef.SystemDrawing)]
  314. public string AttachDBFilename {
  315. get { return _attachDBFilename; }
  316. set {
  317. SetValue(DbConnectionStringKeywords.AttachDBFilename, value);
  318. _attachDBFilename = value;
  319. }
  320. }
  321. [Browsable(false)]
  322. [DisplayName(DbConnectionStringKeywords.ConnectionReset)]
  323. [Obsolete("ConnectionReset has been deprecated. SqlConnection will ignore the 'connection reset' keyword and always reset the connection")] // SQLPT 41700
  324. [ResCategoryAttribute(Res.DataCategory_Pooling)]
  325. [ResDescriptionAttribute(Res.DbConnectionString_ConnectionReset)]
  326. [RefreshPropertiesAttribute(RefreshProperties.All)]
  327. public bool ConnectionReset {
  328. get { return _connectionReset; }
  329. set {
  330. SetValue(DbConnectionStringKeywords.ConnectionReset, value);
  331. _connectionReset = value;
  332. }
  333. }
  334. [DisplayName(DbConnectionStringKeywords.ContextConnection)]
  335. [ResCategoryAttribute(Res.DataCategory_Source)]
  336. [ResDescriptionAttribute(Res.DbConnectionString_ContextConnection)]
  337. [RefreshPropertiesAttribute(RefreshProperties.All)]
  338. public bool ContextConnection {
  339. get { return _contextConnection; }
  340. set {
  341. SetValue(DbConnectionStringKeywords.ContextConnection, value);
  342. _contextConnection = value;
  343. }
  344. }
  345. [DisplayName(DbConnectionStringKeywords.ConnectTimeout)]
  346. [ResCategoryAttribute(Res.DataCategory_Initialization)]
  347. [ResDescriptionAttribute(Res.DbConnectionString_ConnectTimeout)]
  348. [RefreshPropertiesAttribute(RefreshProperties.All)]
  349. public int ConnectTimeout {
  350. get { return _connectTimeout; }
  351. set {
  352. if (value < 0) {
  353. throw ADP.InvalidConnectionOptionValue(DbConnectionStringKeywords.ConnectTimeout);
  354. }
  355. SetValue(DbConnectionStringKeywords.ConnectTimeout, value);
  356. _connectTimeout = value;
  357. }
  358. }
  359. [DisplayName(DbConnectionStringKeywords.CurrentLanguage)]
  360. [ResCategoryAttribute(Res.DataCategory_Initialization)]
  361. [ResDescriptionAttribute(Res.DbConnectionString_CurrentLanguage)]
  362. [RefreshPropertiesAttribute(RefreshProperties.All)]
  363. public string CurrentLanguage {
  364. get { return _currentLanguage; }
  365. set {
  366. SetValue(DbConnectionStringKeywords.CurrentLanguage, value);
  367. _currentLanguage = value;
  368. }
  369. }
  370. [DisplayName(DbConnectionStringKeywords.DataSource)]
  371. [ResCategoryAttribute(Res.DataCategory_Source)]
  372. [ResDescriptionAttribute(Res.DbConnectionString_DataSource)]
  373. [RefreshProperties(RefreshProperties.All)]
  374. [TypeConverter(typeof(SqlDataSourceConverter))]
  375. public string DataSource {
  376. get { return _dataSource; }
  377. set {
  378. SetValue(DbConnectionStringKeywords.DataSource, value);
  379. _dataSource = value;
  380. }
  381. }
  382. [DisplayName(DbConnectionStringKeywords.Encrypt)]
  383. [ResCategoryAttribute(Res.DataCategory_Security)]
  384. [ResDescriptionAttribute(Res.DbConnectionString_Encrypt)]
  385. [RefreshPropertiesAttribute(RefreshProperties.All)]
  386. public bool Encrypt {
  387. get { return _encrypt; }
  388. set {
  389. SetValue(DbConnectionStringKeywords.Encrypt, value);
  390. _encrypt = value;
  391. }
  392. }
  393. [DisplayName(DbConnectionStringKeywords.ColumnEncryptionSetting)]
  394. [ResCategoryAttribute(Res.DataCategory_Security)]
  395. [ResDescriptionAttribute(Res.TCE_DbConnectionString_ColumnEncryptionSetting)]
  396. [RefreshPropertiesAttribute(RefreshProperties.All)]
  397. public SqlConnectionColumnEncryptionSetting ColumnEncryptionSetting {
  398. get { return _columnEncryptionSetting; }
  399. set {
  400. if (!DbConnectionStringBuilderUtil.IsValidColumnEncryptionSetting(value)) {
  401. throw ADP.InvalidEnumerationValue(typeof(SqlConnectionColumnEncryptionSetting), (int)value);
  402. }
  403. SetColumnEncryptionSettingValue(value);
  404. _columnEncryptionSetting = value;
  405. }
  406. }
  407. [DisplayName(DbConnectionStringKeywords.TrustServerCertificate)]
  408. [ResCategoryAttribute(Res.DataCategory_Security)]
  409. [ResDescriptionAttribute(Res.DbConnectionString_TrustServerCertificate)]
  410. [RefreshPropertiesAttribute(RefreshProperties.All)]
  411. public bool TrustServerCertificate {
  412. get { return _trustServerCertificate; }
  413. set {
  414. SetValue(DbConnectionStringKeywords.TrustServerCertificate, value);
  415. _trustServerCertificate = value;
  416. }
  417. }
  418. [DisplayName(DbConnectionStringKeywords.Enlist)]
  419. [ResCategoryAttribute(Res.DataCategory_Pooling)]
  420. [ResDescriptionAttribute(Res.DbConnectionString_Enlist)]
  421. [RefreshPropertiesAttribute(RefreshProperties.All)]
  422. public bool Enlist {
  423. get { return _enlist; }
  424. set {
  425. SetValue(DbConnectionStringKeywords.Enlist, value);
  426. _enlist = value;
  427. }
  428. }
  429. [DisplayName(DbConnectionStringKeywords.FailoverPartner)]
  430. [ResCategoryAttribute(Res.DataCategory_Source)]
  431. [ResDescriptionAttribute(Res.DbConnectionString_FailoverPartner)]
  432. [RefreshPropertiesAttribute(RefreshProperties.All)]
  433. [TypeConverter(typeof(SqlDataSourceConverter))]
  434. public string FailoverPartner {
  435. get { return _failoverPartner; }
  436. set {
  437. SetValue(DbConnectionStringKeywords.FailoverPartner, value);
  438. _failoverPartner= value;
  439. }
  440. }
  441. [DisplayName(DbConnectionStringKeywords.InitialCatalog)]
  442. [ResCategoryAttribute(Res.DataCategory_Source)]
  443. [ResDescriptionAttribute(Res.DbConnectionString_InitialCatalog)]
  444. [RefreshPropertiesAttribute(RefreshProperties.All)]
  445. [TypeConverter(typeof(SqlInitialCatalogConverter))]
  446. public string InitialCatalog {
  447. get { return _initialCatalog; }
  448. set {
  449. SetValue(DbConnectionStringKeywords.InitialCatalog, value);
  450. _initialCatalog = value;
  451. }
  452. }
  453. [DisplayName(DbConnectionStringKeywords.IntegratedSecurity)]
  454. [ResCategoryAttribute(Res.DataCategory_Security)]
  455. [ResDescriptionAttribute(Res.DbConnectionString_IntegratedSecurity)]
  456. [RefreshPropertiesAttribute(RefreshProperties.All)]
  457. public bool IntegratedSecurity {
  458. get { return _integratedSecurity; }
  459. set {
  460. SetValue(DbConnectionStringKeywords.IntegratedSecurity, value);
  461. _integratedSecurity = value;
  462. }
  463. }
  464. [DisplayName(DbConnectionStringKeywords.Authentication)]
  465. [ResCategoryAttribute(Res.DataCategory_Security)]
  466. [ResDescriptionAttribute(Res.DbConnectionString_Authentication)]
  467. [RefreshPropertiesAttribute(RefreshProperties.All)]
  468. public SqlAuthenticationMethod Authentication {
  469. get { return _authentication; }
  470. set {
  471. if (!DbConnectionStringBuilderUtil.IsValidAuthenticationTypeValue(value)) {
  472. throw ADP.InvalidEnumerationValue(typeof(SqlAuthenticationMethod), (int)value);
  473. }
  474. SetAuthenticationValue(value);
  475. _authentication = value;
  476. }
  477. }
  478. [DisplayName(DbConnectionStringKeywords.LoadBalanceTimeout)]
  479. [ResCategoryAttribute(Res.DataCategory_Pooling)]
  480. [ResDescriptionAttribute(Res.DbConnectionString_LoadBalanceTimeout)]
  481. [RefreshPropertiesAttribute(RefreshProperties.All)]
  482. public int LoadBalanceTimeout {
  483. get { return _loadBalanceTimeout; }
  484. set {
  485. if (value < 0) {
  486. throw ADP.InvalidConnectionOptionValue(DbConnectionStringKeywords.LoadBalanceTimeout);
  487. }
  488. SetValue(DbConnectionStringKeywords.LoadBalanceTimeout, value);
  489. _loadBalanceTimeout = value;
  490. }
  491. }
  492. [DisplayName(DbConnectionStringKeywords.MaxPoolSize)]
  493. [ResCategoryAttribute(Res.DataCategory_Pooling)]
  494. [ResDescriptionAttribute(Res.DbConnectionString_MaxPoolSize)]
  495. [RefreshPropertiesAttribute(RefreshProperties.All)]
  496. public int MaxPoolSize {
  497. get { return _maxPoolSize; }
  498. set {
  499. if (value < 1) {
  500. throw ADP.InvalidConnectionOptionValue(DbConnectionStringKeywords.MaxPoolSize);
  501. }
  502. SetValue(DbConnectionStringKeywords.MaxPoolSize, value);
  503. _maxPoolSize = value;
  504. }
  505. }
  506. [DisplayName(DbConnectionStringKeywords.ConnectRetryCount)]
  507. [ResCategoryAttribute(Res.DataCategory_ConnectionResilency)]
  508. [ResDescriptionAttribute(Res.DbConnectionString_ConnectRetryCount)]
  509. [RefreshPropertiesAttribute(RefreshProperties.All)]
  510. public int ConnectRetryCount {
  511. get { return _connectRetryCount; }
  512. set {
  513. if ((value < 0) || (value>255)) {
  514. throw ADP.InvalidConnectionOptionValue(DbConnectionStringKeywords.ConnectRetryCount);
  515. }
  516. SetValue(DbConnectionStringKeywords.ConnectRetryCount, value);
  517. _connectRetryCount = value;
  518. }
  519. }
  520. [DisplayName(DbConnectionStringKeywords.ConnectRetryInterval)]
  521. [ResCategoryAttribute(Res.DataCategory_ConnectionResilency)]
  522. [ResDescriptionAttribute(Res.DbConnectionString_ConnectRetryInterval)]
  523. [RefreshPropertiesAttribute(RefreshProperties.All)]
  524. public int ConnectRetryInterval {
  525. get { return _connectRetryInterval; }
  526. set {
  527. if ((value < 1) || (value > 60)) {
  528. throw ADP.InvalidConnectionOptionValue(DbConnectionStringKeywords.ConnectRetryInterval);
  529. }
  530. SetValue(DbConnectionStringKeywords.ConnectRetryInterval, value);
  531. _connectRetryInterval = value;
  532. }
  533. }
  534. [DisplayName(DbConnectionStringKeywords.MinPoolSize)]
  535. [ResCategoryAttribute(Res.DataCategory_Pooling)]
  536. [ResDescriptionAttribute(Res.DbConnectionString_MinPoolSize)]
  537. [RefreshPropertiesAttribute(RefreshProperties.All)]
  538. public int MinPoolSize {
  539. get { return _minPoolSize; }
  540. set {
  541. if (value < 0) {
  542. throw ADP.InvalidConnectionOptionValue(DbConnectionStringKeywords.MinPoolSize);
  543. }
  544. SetValue(DbConnectionStringKeywords.MinPoolSize, value);
  545. _minPoolSize = value;
  546. }
  547. }
  548. [DisplayName(DbConnectionStringKeywords.MultipleActiveResultSets)]
  549. [ResCategoryAttribute(Res.DataCategory_Advanced)]
  550. [ResDescriptionAttribute(Res.DbConnectionString_MultipleActiveResultSets)]
  551. [RefreshPropertiesAttribute(RefreshProperties.All)]
  552. public bool MultipleActiveResultSets {
  553. get { return _multipleActiveResultSets; }
  554. set {
  555. SetValue(DbConnectionStringKeywords.MultipleActiveResultSets, value);
  556. _multipleActiveResultSets = value;
  557. }
  558. }
  559. [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", Justification = "Reviewed and Approved by UE")]
  560. [DisplayName(DbConnectionStringKeywords.MultiSubnetFailover)]
  561. [ResCategoryAttribute(Res.DataCategory_Source)]
  562. [ResDescriptionAttribute(Res.DbConnectionString_MultiSubnetFailover)]
  563. [RefreshPropertiesAttribute(RefreshProperties.All)]
  564. public bool MultiSubnetFailover {
  565. get { return _multiSubnetFailover; }
  566. set {
  567. SetValue(DbConnectionStringKeywords.MultiSubnetFailover, value);
  568. _multiSubnetFailover = value;
  569. }
  570. }
  571. [DisplayName(DbConnectionStringKeywords.TransparentNetworkIPResolution)]
  572. [ResCategoryAttribute(Res.DataCategory_Source)]
  573. [ResDescriptionAttribute(Res.DbConnectionString_TransparentNetworkIPResolution)]
  574. [RefreshPropertiesAttribute(RefreshProperties.All)]
  575. public bool TransparentNetworkIPResolution
  576. {
  577. get { return _transparentNetworkIPResolution; }
  578. set {
  579. SetValue(DbConnectionStringKeywords.TransparentNetworkIPResolution, value);
  580. _transparentNetworkIPResolution = value;
  581. }
  582. }
  583. /*
  584. [DisplayName(DbConnectionStringKeywords.NamedConnection)]
  585. [ResCategoryAttribute(Res.DataCategory_NamedConnectionString)]
  586. [ResDescriptionAttribute(Res.DbConnectionString_NamedConnection)]
  587. [RefreshPropertiesAttribute(RefreshProperties.All)]
  588. [TypeConverter(typeof(NamedConnectionStringConverter))]
  589. public string NamedConnection {
  590. get { return _namedConnection; }
  591. set {
  592. SetValue(DbConnectionStringKeywords.NamedConnection, value);
  593. _namedConnection = value;
  594. }
  595. }
  596. */
  597. [DisplayName(DbConnectionStringKeywords.NetworkLibrary)]
  598. [ResCategoryAttribute(Res.DataCategory_Advanced)]
  599. [ResDescriptionAttribute(Res.DbConnectionString_NetworkLibrary)]
  600. [RefreshPropertiesAttribute(RefreshProperties.All)]
  601. [TypeConverter(typeof(NetworkLibraryConverter))]
  602. public string NetworkLibrary {
  603. get { return _networkLibrary; }
  604. set {
  605. if (null != value) {
  606. switch(value.Trim().ToLower(CultureInfo.InvariantCulture)) {
  607. case SqlConnectionString.NETLIB.AppleTalk:
  608. value = SqlConnectionString.NETLIB.AppleTalk;
  609. break;
  610. case SqlConnectionString.NETLIB.BanyanVines:
  611. value = SqlConnectionString.NETLIB.BanyanVines;
  612. break;
  613. case SqlConnectionString.NETLIB.IPXSPX:
  614. value = SqlConnectionString.NETLIB.IPXSPX;
  615. break;
  616. case SqlConnectionString.NETLIB.Multiprotocol:
  617. value = SqlConnectionString.NETLIB.Multiprotocol;
  618. break;
  619. case SqlConnectionString.NETLIB.NamedPipes:
  620. value = SqlConnectionString.NETLIB.NamedPipes;
  621. break;
  622. case SqlConnectionString.NETLIB.SharedMemory:
  623. value = SqlConnectionString.NETLIB.SharedMemory;
  624. break;
  625. case SqlConnectionString.NETLIB.TCPIP:
  626. value = SqlConnectionString.NETLIB.TCPIP;
  627. break;
  628. case SqlConnectionString.NETLIB.VIA:
  629. value = SqlConnectionString.NETLIB.VIA;
  630. break;
  631. default:
  632. throw ADP.InvalidConnectionOptionValue(DbConnectionStringKeywords.NetworkLibrary);
  633. }
  634. }
  635. SetValue(DbConnectionStringKeywords.NetworkLibrary, value);
  636. _networkLibrary = value;
  637. }
  638. }
  639. [DisplayName(DbConnectionStringKeywords.PacketSize)]
  640. [ResCategoryAttribute(Res.DataCategory_Advanced)]
  641. [ResDescriptionAttribute(Res.DbConnectionString_PacketSize)]
  642. [RefreshPropertiesAttribute(RefreshProperties.All)]
  643. public int PacketSize {
  644. get { return _packetSize; }
  645. set {
  646. if ((value < TdsEnums.MIN_PACKET_SIZE) || (TdsEnums.MAX_PACKET_SIZE < value)) {
  647. throw SQL.InvalidPacketSizeValue();
  648. }
  649. SetValue(DbConnectionStringKeywords.PacketSize, value);
  650. _packetSize = value;
  651. }
  652. }
  653. [DisplayName(DbConnectionStringKeywords.Password)]
  654. [PasswordPropertyTextAttribute(true)]
  655. [ResCategoryAttribute(Res.DataCategory_Security)]
  656. [ResDescriptionAttribute(Res.DbConnectionString_Password)]
  657. [RefreshPropertiesAttribute(RefreshProperties.All)]
  658. public string Password {
  659. get { return _password; }
  660. set {
  661. SetValue(DbConnectionStringKeywords.Password, value);
  662. _password = value;
  663. }
  664. }
  665. [DisplayName(DbConnectionStringKeywords.PersistSecurityInfo)]
  666. [ResCategoryAttribute(Res.DataCategory_Security)]
  667. [ResDescriptionAttribute(Res.DbConnectionString_PersistSecurityInfo)]
  668. [RefreshPropertiesAttribute(RefreshProperties.All)]
  669. public bool PersistSecurityInfo {
  670. get { return _persistSecurityInfo; }
  671. set {
  672. SetValue(DbConnectionStringKeywords.PersistSecurityInfo, value);
  673. _persistSecurityInfo = value;
  674. }
  675. }
  676. [DisplayName(DbConnectionStringKeywords.Pooling)]
  677. [ResCategoryAttribute(Res.DataCategory_Pooling)]
  678. [ResDescriptionAttribute(Res.DbConnectionString_Pooling)]
  679. [RefreshPropertiesAttribute(RefreshProperties.All)]
  680. public bool Pooling {
  681. get { return _pooling; }
  682. set {
  683. SetValue(DbConnectionStringKeywords.Pooling, value);
  684. _pooling = value;
  685. }
  686. }
  687. [DisplayName(DbConnectionStringKeywords.Replication)]
  688. [ResCategoryAttribute(Res.DataCategory_Replication)]
  689. [ResDescriptionAttribute(Res.DbConnectionString_Replication )]
  690. [RefreshPropertiesAttribute(RefreshProperties.All)]
  691. public bool Replication {
  692. get { return _replication; }
  693. set {
  694. SetValue(DbConnectionStringKeywords.Replication, value);
  695. _replication = value;
  696. }
  697. }
  698. [DisplayName(DbConnectionStringKeywords.TransactionBinding)]
  699. [ResCategoryAttribute(Res.DataCategory_Advanced)]
  700. [ResDescriptionAttribute(Res.DbConnectionString_TransactionBinding)]
  701. [RefreshPropertiesAttribute(RefreshProperties.All)]
  702. public string TransactionBinding {
  703. get { return _transactionBinding; }
  704. set {
  705. SetValue(DbConnectionStringKeywords.TransactionBinding, value);
  706. _transactionBinding = value;
  707. }
  708. }
  709. [DisplayName(DbConnectionStringKeywords.TypeSystemVersion)]
  710. [ResCategoryAttribute(Res.DataCategory_Advanced)]
  711. [ResDescriptionAttribute(Res.DbConnectionString_TypeSystemVersion)]
  712. [RefreshPropertiesAttribute(RefreshProperties.All)]
  713. public string TypeSystemVersion {
  714. get { return _typeSystemVersion; }
  715. set {
  716. SetValue(DbConnectionStringKeywords.TypeSystemVersion, value);
  717. _typeSystemVersion = value;
  718. }
  719. }
  720. [DisplayName(DbConnectionStringKeywords.UserID)]
  721. [ResCategoryAttribute(Res.DataCategory_Security)]
  722. [ResDescriptionAttribute(Res.DbConnectionString_UserID)]
  723. [RefreshPropertiesAttribute(RefreshProperties.All)]
  724. public string UserID {
  725. get { return _userID; }
  726. set {
  727. SetValue(DbConnectionStringKeywords.UserID, value);
  728. _userID = value;
  729. }
  730. }
  731. [DisplayName(DbConnectionStringKeywords.UserInstance)]
  732. [ResCategoryAttribute(Res.DataCategory_Source)]
  733. [ResDescriptionAttribute(Res.DbConnectionString_UserInstance)]
  734. [RefreshPropertiesAttribute(RefreshProperties.All)]
  735. public bool UserInstance {
  736. get { return _userInstance; }
  737. set {
  738. SetValue(DbConnectionStringKeywords.UserInstance, value);
  739. _userInstance = value;
  740. }
  741. }
  742. [DisplayName(DbConnectionStringKeywords.WorkstationID)]
  743. [ResCategoryAttribute(Res.DataCategory_Context)]
  744. [ResDescriptionAttribute(Res.DbConnectionString_WorkstationID)]
  745. [RefreshPropertiesAttribute(RefreshProperties.All)]
  746. public string WorkstationID {
  747. get { return _workstationID; }
  748. set {
  749. SetValue(DbConnectionStringKeywords.WorkstationID, value);
  750. _workstationID = value;
  751. }
  752. }
  753. public override bool IsFixedSize {
  754. get {
  755. return true;
  756. }
  757. }
  758. public override ICollection Keys {
  759. get {
  760. return new System.Data.Common.ReadOnlyCollection<string>(_validKeywords);
  761. }
  762. }
  763. public override ICollection Values {
  764. get {
  765. // written this way so if the ordering of Keywords & _validKeywords changes
  766. // this is one less place to maintain
  767. object[] values = new object[_validKeywords.Length];
  768. for(int i = 0; i < values.Length; ++i) {
  769. values[i] = GetAt((Keywords)i);
  770. }
  771. return new System.Data.Common.ReadOnlyCollection<object>(values);
  772. }
  773. }
  774. public override void Clear() {
  775. base.Clear();
  776. for(int i = 0; i < _validKeywords.Length; ++i) {
  777. Reset((Keywords)i);
  778. }
  779. }
  780. public override bool ContainsKey(string keyword) {
  781. ADP.CheckArgumentNull(keyword, "keyword");
  782. return _keywords.ContainsKey(keyword);
  783. }
  784. private static bool ConvertToBoolean(object value) {
  785. return DbConnectionStringBuilderUtil.ConvertToBoolean(value);
  786. }
  787. private static int ConvertToInt32(object value) {
  788. return DbConnectionStringBuilderUtil.ConvertToInt32(value);
  789. }
  790. private static bool ConvertToIntegratedSecurity(object value) {
  791. return DbConnectionStringBuilderUtil.ConvertToIntegratedSecurity(value);
  792. }
  793. private static string ConvertToString(object value) {
  794. return DbConnectionStringBuilderUtil.ConvertToString(value);
  795. }
  796. private static ApplicationIntent ConvertToApplicationIntent(string keyword, object value) {
  797. return DbConnectionStringBuilderUtil.ConvertToApplicationIntent(keyword, value);
  798. }
  799. private static SqlAuthenticationMethod ConvertToAuthenticationType(string keyword, object value) {
  800. return DbConnectionStringBuilderUtil.ConvertToAuthenticationType(keyword, value);
  801. }
  802. /// <summary>
  803. /// Convert to SqlConnectionColumnEncryptionSetting.
  804. /// </summary>
  805. /// <param name="keyword"></param>
  806. /// <param name="value"></param>
  807. private static SqlConnectionColumnEncryptionSetting ConvertToColumnEncryptionSetting(string keyword, object value) {
  808. return DbConnectionStringBuilderUtil.ConvertToColumnEncryptionSetting(keyword, value);
  809. }
  810. internal override string ConvertValueToString(object value) {
  811. if (value is SqlAuthenticationMethod) {
  812. return DbConnectionStringBuilderUtil.AuthenticationTypeToString((SqlAuthenticationMethod)value);
  813. }
  814. else {
  815. return base.ConvertValueToString(value);
  816. }
  817. }
  818. private object GetAt(Keywords index) {
  819. switch(index) {
  820. case Keywords.ApplicationIntent: return this.ApplicationIntent;
  821. case Keywords.ApplicationName: return ApplicationName;
  822. case Keywords.AsynchronousProcessing: return AsynchronousProcessing;
  823. case Keywords.AttachDBFilename: return AttachDBFilename;
  824. case Keywords.ConnectTimeout: return ConnectTimeout;
  825. #pragma warning disable 618 // Obsolete ConnectionReset
  826. case Keywords.ConnectionReset: return ConnectionReset;
  827. #pragma warning restore 618
  828. case Keywords.ContextConnection: return ContextConnection;
  829. case Keywords.CurrentLanguage: return CurrentLanguage;
  830. case Keywords.DataSource: return DataSource;
  831. case Keywords.Encrypt: return Encrypt;
  832. case Keywords.Enlist: return Enlist;
  833. case Keywords.FailoverPartner: return FailoverPartner;
  834. case Keywords.InitialCatalog: return InitialCatalog;
  835. case Keywords.IntegratedSecurity: return IntegratedSecurity;
  836. case Keywords.LoadBalanceTimeout: return LoadBalanceTimeout;
  837. case Keywords.MultipleActiveResultSets: return MultipleActiveResultSets;
  838. case Keywords.MaxPoolSize: return MaxPoolSize;
  839. case Keywords.MinPoolSize: return MinPoolSize;
  840. case Keywords.MultiSubnetFailover: return MultiSubnetFailover;
  841. case Keywords.TransparentNetworkIPResolution: return TransparentNetworkIPResolution;
  842. // case Keywords.NamedConnection: return NamedConnection;
  843. case Keywords.NetworkLibrary: return NetworkLibrary;
  844. case Keywords.PacketSize: return PacketSize;
  845. case Keywords.Password: return Password;
  846. case Keywords.PersistSecurityInfo: return PersistSecurityInfo;
  847. case Keywords.Pooling: return Pooling;
  848. case Keywords.Replication: return Replication;
  849. case Keywords.TransactionBinding: return TransactionBinding;
  850. case Keywords.TrustServerCertificate: return TrustServerCertificate;
  851. case Keywords.TypeSystemVersion: return TypeSystemVersion;
  852. case Keywords.UserID: return UserID;
  853. case Keywords.UserInstance: return UserInstance;
  854. case Keywords.WorkstationID: return WorkstationID;
  855. case Keywords.ConnectRetryCount: return ConnectRetryCount;
  856. case Keywords.ConnectRetryInterval: return ConnectRetryInterval;
  857. case Keywords.Authentication: return Authentication;
  858. case Keywords.ColumnEncryptionSetting: return ColumnEncryptionSetting;
  859. default:
  860. Debug.Assert(false, "unexpected keyword");
  861. throw ADP.KeywordNotSupported(_validKeywords[(int)index]);
  862. }
  863. }
  864. private Keywords GetIndex(string keyword) {
  865. ADP.CheckArgumentNull(keyword, "keyword");
  866. Keywords index;
  867. if (_keywords.TryGetValue(keyword, out index)) {
  868. return index;
  869. }
  870. throw ADP.KeywordNotSupported(keyword);
  871. }
  872. protected override void GetProperties(Hashtable propertyDescriptors) {
  873. foreach(PropertyDescriptor reflected in TypeDescriptor.GetProperties(this, true)) {
  874. bool refreshOnChange = false;
  875. bool isReadonly = false;
  876. string displayName = reflected.DisplayName;
  877. // 'Password' & 'User ID' will be readonly if 'Integrated Security' is true
  878. if (DbConnectionStringKeywords.IntegratedSecurity == displayName) {
  879. refreshOnChange = true;
  880. isReadonly = reflected.IsReadOnly;
  881. }
  882. else if ((DbConnectionStringKeywords.Password == displayName) ||
  883. (DbConnectionStringKeywords.UserID == displayName)) {
  884. isReadonly = IntegratedSecurity;
  885. }
  886. else {
  887. continue;
  888. }
  889. Attribute[] attributes = GetAttributesFromCollection(reflected.Attributes);
  890. DbConnectionStringBuilderDescriptor descriptor = new DbConnectionStringBuilderDescriptor(reflected.Name,
  891. reflected.ComponentType, reflected.PropertyType, isReadonly, attributes);
  892. descriptor.RefreshOnChange = refreshOnChange;
  893. propertyDescriptors[displayName] = descriptor;
  894. }
  895. base.GetProperties(propertyDescriptors);
  896. }
  897. public override bool Remove(string keyword) {
  898. ADP.CheckArgumentNull(keyword, "keyword");
  899. Keywords index;
  900. if (_keywords.TryGetValue(keyword, out index)) {
  901. if (base.Remove(_validKeywords[(int)index])) {
  902. Reset(index);
  903. return true;
  904. }
  905. }
  906. return false;
  907. }
  908. private void Reset(Keywords index) {
  909. switch(index) {
  910. case Keywords.ApplicationIntent:
  911. _applicationIntent = DbConnectionStringDefaults.ApplicationIntent;
  912. break;
  913. case Keywords.ApplicationName:
  914. _applicationName = DbConnectionStringDefaults.ApplicationName;
  915. break;
  916. case Keywords.AsynchronousProcessing:
  917. _asynchronousProcessing = DbConnectionStringDefaults.AsynchronousProcessing;
  918. break;
  919. case Keywords.AttachDBFilename:
  920. _attachDBFilename = DbConnectionStringDefaults.AttachDBFilename;
  921. break;
  922. case Keywords.Authentication:
  923. _authentication = DbConnectionStringDefaults.Authentication;
  924. break;
  925. case Keywords.ConnectTimeout:
  926. _connectTimeout = DbConnectionStringDefaults.ConnectTimeout;
  927. break;
  928. case Keywords.ConnectionReset:
  929. _connectionReset = DbConnectionStringDefaults.ConnectionReset;
  930. break;
  931. case Keywords.ContextConnection:
  932. _contextConnection = DbConnectionStringDefaults.ContextConnection;
  933. break;
  934. case Keywords.CurrentLanguage:
  935. _currentLanguage = DbConnectionStringDefaults.CurrentLanguage;
  936. break;
  937. case Keywords.DataSource:
  938. _dataSource = DbConnectionStringDefaults.DataSource;
  939. break;
  940. case Keywords.Encrypt:
  941. _encrypt = DbConnectionStringDefaults.Encrypt;
  942. break;
  943. case Keywords.Enlist:
  944. _enlist = DbConnectionStringDefaults.Enlist;
  945. break;
  946. case Keywords.FailoverPartner:
  947. _failoverPartner = DbConnectionStringDefaults.FailoverPartner;
  948. break;
  949. case Keywords.InitialCatalog:
  950. _initialCatalog = DbConnectionStringDefaults.InitialCatalog;
  951. break;
  952. case Keywords.IntegratedSecurity:
  953. _integratedSecurity = DbConnectionStringDefaults.IntegratedSecurity;
  954. break;
  955. case Keywords.LoadBalanceTimeout:
  956. _loadBalanceTimeout = DbConnectionStringDefaults.LoadBalanceTimeout;
  957. break;
  958. case Keywords.MultipleActiveResultSets:
  959. _multipleActiveResultSets = DbConnectionStringDefaults.MultipleActiveResultSets;
  960. break;
  961. case Keywords.MaxPoolSize:
  962. _maxPoolSize = DbConnectionStringDefaults.MaxPoolSize;
  963. break;
  964. case Keywords.MinPoolSize:
  965. _minPoolSize = DbConnectionStringDefaults.MinPoolSize;
  966. break;
  967. case Keywords.MultiSubnetFailover:
  968. _multiSubnetFailover = DbConnectionStringDefaults.MultiSubnetFailover;
  969. break;
  970. case Keywords.TransparentNetworkIPResolution:
  971. _transparentNetworkIPResolution = DbConnectionStringDefaults.TransparentNetworkIPResolution;
  972. break;
  973. // case Keywords.NamedConnection:
  974. // _namedConnection = DbConnectionStringDefaults.NamedConnection;
  975. // break;
  976. case Keywords.NetworkLibrary:
  977. _networkLibrary = DbConnectionStringDefaults.NetworkLibrary;
  978. break;
  979. case Keywords.PacketSize:
  980. _packetSize = DbConnectionStringDefaults.PacketSize;
  981. break;
  982. case Keywords.Password:
  983. _password = DbConnectionStringDefaults.Password;
  984. break;
  985. case Keywords.PersistSecurityInfo:
  986. _persistSecurityInfo = DbConnectionStringDefaults.PersistSecurityInfo;
  987. break;
  988. case Keywords.Pooling:
  989. _pooling = DbConnectionStringDefaults.Pooling;
  990. break;
  991. case Keywords.ConnectRetryCount:
  992. _connectRetryCount = DbConnectionStringDefaults.ConnectRetryCount;
  993. break;
  994. case Keywords.ConnectRetryInterval:
  995. _connectRetryInterval = DbConnectionStringDefaults.ConnectRetryInterval;
  996. break;
  997. case Keywords.Replication:
  998. _replication = DbConnectionStringDefaults.Replication;
  999. break;
  1000. case Keywords.TransactionBinding:
  1001. _transactionBinding = DbConnectionStringDefaults.TransactionBinding;
  1002. break;
  1003. case Keywords.TrustServerCertificate:
  1004. _trustServerCertificate = DbConnectionStringDefaults.TrustServerCertificate;
  1005. break;
  1006. case Keywords.TypeSystemVersion:
  1007. _typeSystemVersion = DbConnectionStringDefaults.TypeSystemVersion;
  1008. break;
  1009. case Keywords.UserID:
  1010. _userID = DbConnectionStringDefaults.UserID;
  1011. break;
  1012. case Keywords.UserInstance:
  1013. _userInstance = DbConnectionStringDefaults.UserInstance;
  1014. break;
  1015. case Keywords.WorkstationID:
  1016. _workstationID = DbConnectionStringDefaults.WorkstationID;
  1017. break;
  1018. case Keywords.ColumnEncryptionSetting:
  1019. _columnEncryptionSetting = DbConnectionStringDefaults.ColumnEncryptionSetting;
  1020. break;
  1021. default:
  1022. Debug.Assert(false, "unexpected keyword");
  1023. throw ADP.KeywordNotSupported(_validKeywords[(int)index]);
  1024. }
  1025. }
  1026. private void SetValue(string keyword, bool value) {
  1027. base[keyword] = value.ToString((System.IFormatProvider)null);
  1028. }
  1029. private void SetValue(string keyword, int value) {
  1030. base[keyword] = value.ToString((System.IFormatProvider)null);
  1031. }
  1032. private void SetValue(string keyword, string value) {
  1033. ADP.CheckArgumentNull(value, keyword);
  1034. base[keyword] = value;
  1035. }
  1036. private void SetApplicationIntentValue(ApplicationIntent value) {
  1037. Debug.Assert(DbConnectionStringBuilderUtil.IsValidApplicationIntentValue(value), "Invalid value for ApplicationIntent");
  1038. base[DbConnectionStringKeywords.ApplicationIntent] = DbConnectionStringBuilderUtil.ApplicationIntentToString(value);
  1039. }
  1040. private void SetAuthenticationValue(SqlAuthenticationMethod value) {
  1041. Debug.Assert(DbConnectionStringBuilderUtil.IsValidAuthenticationTypeValue(value), "Invalid value for AuthenticationType");
  1042. base[DbConnectionStringKeywords.Authentication] = DbConnectionStringBuilderUtil.AuthenticationTypeToString(value);
  1043. }
  1044. private void SetColumnEncryptionSettingValue(SqlConnectionColumnEncryptionSetting value) {
  1045. Debug.Assert(DbConnectionStringBuilderUtil.IsValidColumnEncryptionSetting(value), "Invalid value for SqlConnectionColumnEncryptionSetting");
  1046. base[DbConnectionStringKeywords.ColumnEncryptionSetting] = DbConnectionStringBuilderUtil.ColumnEncryptionSettingToString(value);
  1047. }
  1048. public override bool ShouldSerialize(string keyword) {
  1049. ADP.CheckArgumentNull(keyword, "keyword");
  1050. Keywords index;
  1051. return _keywords.TryGetValue(keyword, out index) && base.ShouldSerialize(_validKeywords[(int)index]);
  1052. }
  1053. public override bool TryGetValue(string keyword, out object value) {
  1054. Keywords index;
  1055. if (_keywords.TryGetValue(keyword, out index)) {
  1056. value = GetAt(index);
  1057. return true;
  1058. }
  1059. value = null;
  1060. return false;
  1061. }
  1062. private sealed class NetworkLibraryConverter : TypeConverter {
  1063. // private const string AppleTalk = "Apple Talk (DBMSADSN)"; Invalid protocals
  1064. // private const string BanyanVines = "Banyan VINES (DBMSVINN)";
  1065. // private const string IPXSPX = "NWLink IPX/SPX (DBMSSPXN)";
  1066. // private const string Multiprotocol = "Multiprotocol (DBMSRPCN)";
  1067. private const string NamedPipes = "Named Pipes (DBNMPNTW)"; // valid protocols
  1068. private const string SharedMemory = "Shared Memory (DBMSLPCN)";
  1069. private const string TCPIP = "TCP/IP (DBMSSOCN)";
  1070. private const string VIA = "VIA (DBMSGNET)";
  1071. // these are correctly non-static, property grid will cache an instance
  1072. private StandardValuesCollection _standardValues;
  1073. // converter classes should have public ctor
  1074. public NetworkLibraryConverter() {
  1075. }
  1076. public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType) {
  1077. // Only know how to convert from a string
  1078. return ((typeof(string) == sourceType) || base.CanConvertFrom(context, sourceType));
  1079. }
  1080. public override object ConvertFrom(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value) {
  1081. string svalue = (value as string);
  1082. if (null != svalue) {
  1083. svalue = svalue.Trim();
  1084. if (StringComparer.OrdinalIgnoreCase.Equals(svalue, NamedPipes)) {
  1085. return SqlConnectionString.NETLIB.NamedPipes;
  1086. }
  1087. else if (StringComparer.OrdinalIgnoreCase.Equals(svalue, SharedMemory)) {
  1088. return SqlConnectionString.NETLIB.SharedMemory;
  1089. }
  1090. else if (StringComparer.OrdinalIgnoreCase.Equals(svalue, TCPIP)) {
  1091. return SqlConnectionString.NETLIB.TCPIP;
  1092. }
  1093. else if (StringComparer.OrdinalIgnoreCase.Equals(svalue, VIA)) {
  1094. return SqlConnectionString.NETLIB.VIA;
  1095. }
  1096. else {
  1097. return svalue;
  1098. }
  1099. }
  1100. return base.ConvertFrom(context, culture, value);
  1101. }
  1102. public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType) {
  1103. return ((typeof(string) == destinationType) || base.CanConvertTo(context, destinationType));
  1104. }
  1105. public override object ConvertTo(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value, Type destinationType) {
  1106. string svalue = (value as string);
  1107. if ((null != svalue) && (destinationType == typeof(string))) {
  1108. switch(svalue.Trim().ToLower(CultureInfo.InvariantCulture)) {
  1109. case SqlConnectionString.NETLIB.NamedPipes:
  1110. return NamedPipes;
  1111. case SqlConnectionString.NETLIB.SharedMemory:
  1112. return SharedMemory;
  1113. case SqlConnectionString.NETLIB.TCPIP:
  1114. return TCPIP;
  1115. case SqlConnectionString.NETLIB.VIA:
  1116. return VIA;
  1117. default:
  1118. return svalue;
  1119. }
  1120. }
  1121. return base.ConvertTo(context, culture, value, destinationType);
  1122. }
  1123. public override bool GetStandardValuesSupported(ITypeDescriptorContext context) {
  1124. return true;
  1125. }
  1126. public override bool GetStandardValuesExclusive(ITypeDescriptorContext context) {
  1127. return false;
  1128. }
  1129. public override StandardValuesCollection GetStandardValues(ITypeDescriptorContext context) {
  1130. SqlConnectionStringBuilder constr = null;
  1131. if (null != context) {
  1132. constr = (context.Instance as SqlConnectionStringBuilder);
  1133. }
  1134. StandardValuesCollection standardValues = _standardValues;
  1135. if (null == standardValues) {
  1136. string[] names = new string[] {
  1137. NamedPipes,
  1138. SharedMemory,
  1139. TCPIP,
  1140. VIA,
  1141. };
  1142. standardValues = new StandardValuesCollection(names);
  1143. _standardValues = standardValues;
  1144. }
  1145. return standardValues;
  1146. }
  1147. }
  1148. private sealed class SqlDataSourceConverter : StringConverter {
  1149. private StandardValuesCollection _standardValues;
  1150. // converter classes should have public ctor
  1151. public SqlDataSourceConverter() {
  1152. }
  1153. public override bool GetStandardValuesSupported(ITypeDescriptorContext context) {
  1154. return true;
  1155. }
  1156. public override bool GetStandardValuesExclusive(ITypeDescriptorContext context) {
  1157. return false;
  1158. }
  1159. public override StandardValuesCollection GetStandardValues(ITypeDescriptorContext context) {
  1160. StandardValuesCollection dataSourceNames = _standardValues;
  1161. if (null == _standardValues) {
  1162. // Get the sources rowset for the SQLOLEDB enumerator
  1163. DataTable table = SqlClientFactory.Instance.CreateDataSourceEnumerator().GetDataSources();
  1164. DataColumn serverName = table.Columns[System.Data.Sql.SqlDataSourceEnumerator.ServerName];
  1165. DataColumn instanceName = table.Columns[System.Data.Sql.SqlDataSourceEnumerator.InstanceName];
  1166. DataRowCollection rows = table.Rows;
  1167. string[] serverNames = new string[rows.Count];
  1168. for(int i = 0; i < serverNames.Length; ++i) {
  1169. string server = rows[i][serverName] as string;
  1170. string instance = rows[i][instanceName] as string;
  1171. if ((null == instance) || (0 == instance.Length) || ("MSSQLSERVER" == instance)) {
  1172. serverNames[i] = server;
  1173. }
  1174. else {
  1175. serverNames[i] = server + @"\" + instance;
  1176. }
  1177. }
  1178. Array.Sort<string>(serverNames);
  1179. // Create the standard values collection that contains the sources
  1180. dataSourceNames = new StandardValuesCollection(serverNames);
  1181. _standardValues = dataSourceNames;
  1182. }
  1183. return dataSourceNames;
  1184. }
  1185. }
  1186. private sealed class SqlInitialCatalogConverter : StringConverter {
  1187. // converter classes should have public ctor
  1188. public SqlInitialCatalogConverter() {
  1189. }
  1190. public override bool GetStandardValuesSupported(ITypeDescriptorContext context) {
  1191. return GetStandardValuesSupportedInternal(context);
  1192. }
  1193. private bool GetStandardValuesSupportedInternal(ITypeDescriptorContext context) {
  1194. // Only say standard values are supported if the connection string has enough
  1195. // information set to instantiate a connection and retrieve a list of databases
  1196. bool flag = false;
  1197. if (null != context) {
  1198. SqlConnectionStringBuilder constr = (context.Instance as SqlConnectionStringBuilder);
  1199. if (null != constr) {
  1200. if ((0 < constr.DataSource.Length) && (constr.IntegratedSecurity || (0 < constr.UserID.Length))) {
  1201. flag = true;
  1202. }
  1203. }
  1204. }
  1205. return flag;
  1206. }
  1207. public override bool GetStandardValuesExclusive(ITypeDescriptorContext context) {
  1208. // Although theoretically this could be true, some people may want to just type in a name
  1209. return false;
  1210. }
  1211. public override StandardValuesCollection GetStandardValues(ITypeDescriptorContext context) {
  1212. // There can only be standard values if the connection string is in a state that might
  1213. // be able to instantiate a connection
  1214. if (GetStandardValuesSupportedInternal(context)) {
  1215. // Create an array list to store the database names
  1216. List<string> values = new List<string>();
  1217. try {
  1218. SqlConnectionStringBuilder constr = (SqlConnectionStringBuilder)context.Instance;
  1219. // Create a connection
  1220. using(SqlConnection connection = new SqlConnection()) {
  1221. // Create a basic connection string from current property values
  1222. connection.ConnectionString = constr.ConnectionString;
  1223. // Try to open the connection
  1224. connection.Open();
  1225. DataTable databaseTable = connection.GetSchema("DATABASES");
  1226. foreach (DataRow row in databaseTable.Rows) {
  1227. string dbName = (string)row["database_name"];
  1228. values.Add(dbName);
  1229. }
  1230. }
  1231. }
  1232. catch(SqlException e) {
  1233. ADP.TraceExceptionWithoutRethrow(e);
  1234. // silently fail
  1235. }
  1236. // Return values as a StandardValuesCollection
  1237. return new StandardValuesCollection(values);
  1238. }
  1239. return null;
  1240. }
  1241. }
  1242. sealed internal class SqlConnectionStringBuilderConverter : ExpandableObjectConverter {
  1243. // converter classes should have public ctor
  1244. public SqlConnectionStringBuilderConverter() {
  1245. }
  1246. override public bool CanConvertTo(ITypeDescriptorContext context, Type destinationType) {
  1247. if (typeof(System.ComponentModel.Design.Serialization.InstanceDescriptor) == destinationType) {
  1248. return true;
  1249. }
  1250. return base.CanConvertTo(context, destinationType);
  1251. }
  1252. override public object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType) {
  1253. if (destinationType == null) {
  1254. throw ADP.ArgumentNull("destinationType");
  1255. }
  1256. if (typeof(System.ComponentModel.Design.Serialization.InstanceDescriptor) == destinationType) {
  1257. SqlConnectionStringBuilder obj = (value as SqlConnectionStringBuilder);
  1258. if (null != obj) {
  1259. return ConvertToInstanceDescriptor(obj);
  1260. }
  1261. }
  1262. return base.ConvertTo(context, culture, value, destinationType);
  1263. }
  1264. private System.ComponentModel.Design.Serialization.InstanceDescriptor ConvertToInstanceDescriptor(SqlConnectionStringBuilder options) {
  1265. Type[] ctorParams = new Type[] { typeof(string) };
  1266. object[] ctorValues = new object[] { options.ConnectionString };
  1267. System.Reflection.ConstructorInfo ctor = typeof(SqlConnectionStringBuilder).GetConstructor(ctorParams);
  1268. return new System.ComponentModel.Design.Serialization.InstanceDescriptor(ctor, ctorValues);
  1269. }
  1270. }
  1271. }
  1272. }