以下は、Microsoft OLE DB Provider forSQLServerで構成ツールを使用してデータベースに接続したときに生成される接続文字列です。
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'のログインに失敗しました」です。
OLEDB接続文字列は正常です。C#で使用しているクラスの一部が原因で、SQL Server Native Clientのログインに失敗していませんか?SQL Server Native Client 10.0はパスワードを暗号化しますか?接続文字列に含まれているプロバイダーを特定し、2つの異なるコードパスを使用する必要がありますか?もしそうなら、接続するには何が必要ですか?
基本的な質問は、受信した接続文字列(上記の2つのみ)に関係なく、接続を成功させるにはどうすればよいですか?
注意:接続文字列を制御することはできません。私は自分が受け取っているものでしか作業できません。