[英]Connection string works for OLE DB connection but not Sql Server Native Client 10.0
以下是當我使用Microsoft SQL Server的Microsoft OLE DB提供程序使用配置工具連接到數據庫時生成的連接字符串。
Provider=SQLOLEDB.1;Password=password;Persist Security Info=True;User ID=sa;
Initial Catalog=database;Data Source=localhost;Use Procedure for Prepare=1;
Auto Translate=True;Packet Size=4096;Workstation ID=computer1;
Use Encryption for Data=False;Tag with column collation when possible=False
如果我使用SQL Server Native Client 10.0連接到相同的數據庫,則會得到此連接字符串。
Provider=SQLNCLI10.1;Integrated Security=\"\";Persist Security Info=False;
User ID=sa;Initial Catalog=database;Data Source=localhost;Use Procedure for Prepare=1;
Auto Translate=True;Packet Size=4096;Workstation ID=computer1;
Initial File Name=\"\";Use Encryption for Data=False;
Tag with column collation when possible=False;
MARS Connection=False;DataTypeCompatibility=0;Trust Server Certificate=False\0
我有一個ac#應用程序,它讀取這些連接字符串之一,並使用它來創建與我的數據庫的連接,如下所示
SqlConnectionStringBuilder _sqlConnectionStringBuilder = new SqlConnectionStringBuilder();
OleDbConnectionStringBuilder conBuilder = new OleDbConnectionStringBuilder( CONNECTION STRING SHOWN ABOVE);
_initialCatalogValue = (string)conBuilder["Initial Catalog"];
_dataSourceValue = conBuilder.DataSource;
_sqlConnectionStringBuilder.Password = (string)conBuilder["Password"];
_sqlConnectionStringBuilder.UserID = (string)conBuilder["User Id"];
_sqlConnectionStringBuilder.InitialCatalog = _initialCatalogValue;
_sqlConnectionStringBuilder.DataSource = _dataSourceValue;
_sqlConnectionStringBuilder.PersistSecurityInfo = true;
_conn = new SqlConnection(_sqlConnectionStringBuilder.ConnectionString);
_conn.Open();
當我使用SQL Server本機客戶端時,密碼為空並且SQLConnection在登錄時將失敗的問題。 我收到的錯誤是“用戶'sa'登錄失敗”。
OLE DB連接字符串成功。 由於我在C#中使用了某些類,因此登錄SQL Server本機客戶端失敗嗎? Sql Server Native Client 10.0是否加密密碼? 我是否應該嘗試確定連接字符串中包含哪個提供者並具有兩個不同的代碼路徑? 如果是這樣,連接將需要什么?
基本問題是,無論我收到哪個連接字符串(僅上述兩個),如何確保連接成功?
注意:我無法控制連接字符串。 我只能處理收到的內容。
您提供的第二個連接字符串不包含密碼。 因此,當您將conBuilder.ConnectionString
設置為第二個字符串時, conBuilder["Password"]
返回一個空字符串。
該問題如下解決。
有一個主要應用程序正在使用上述連接字符串,並且正在執行以下操作。
應用程序將使用連接字符串。 如果連接字符串的提供者是SQL Server本機客戶端(SQLNCLI10.1),則應用程序將檢查持久性安全性。 如果找不到,則將IntegratedSecurity = SSPI添加到連接字符串,然后使用Windows身份驗證進行連接。 這是否是正確的(或安全的操作),即正在執行的操作。
要“回答”問題。 您可以輸入連接字符串,如果找不到密碼,則可以設置IntegratedSecurity = SSPI。 這將允許您使用Windows身份驗證而不是SQL Server身份驗證進行連接。 我不建議您這樣做,但是它將起作用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.