0

LinqToSQL を使用してデータベースにクエリを実行するプロジェクトがありますが、コンパイル後に編集できるファイルから接続文字列を取得する方法がわかりません。これを行う正しい方法は何ですか?

MSLinqToSQLGenerator によって構築された CleansingData というファイルがあり、次のようになっています。

<?xml version="1.0" encoding="utf-8"?><Database Name="MyDBApp" Class="DataClasses1DataContext" xmlns="http://schemas.microsoft.com/linqtosql/dbml/2007">
<Connection Mode="AppSettings" ConnectionString="Data Source=MyServer\MyDB;Initial Catalog=MyCatalog;Persist Security Info=True;User ID=MyUser" SettingsObjectName="CleansingDataReference.Properties.Settings" SettingsPropertyName="NetVisConnectionString" Provider="System.Data.SqlClient" />
<Table Name="dbo.CleansedData" Member="CleansedDatas">
<Type Name="CleansedData">
  <Column Name="CleansedDataID" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" IsPrimaryKey="true" CanBeNull="false" />
  <Column Name="CleansedOperationID" Type="System.Guid" DbType="UniqueIdentifier" CanBeNull="true" />

値を持つ ConnectionString 設定を含む設定ファイルもあります

Data Source=MyServer\MyDB;Initial Catalog=MyCatalog;Persist Security Info=True;User ID=MyUser;Password=MyAdmin

そして app.config は次のようになります:

<?xml version="1.0"?>
<configuration>
  <configSections>
  </configSections>
  <connectionStrings>
    <add name="CleansingDataReference.Properties.Settings.NetVisConnectionString"
        connectionString="Data Source=MyServer\MyDB;Initial Catalog=MyCatalog;Persist Security Info=True;User ID=MyUser;Password=MyPassword"
        providerName="System.Data.SqlClient" />
</connectionStrings>
<startup><supportedRuntime version="v2.0.50727"/></startup></configuration>

だから私は場所で接続文字列になってしまいました! コンパイル後に接続文字列を変更できる唯一の場所は app.config ですが、実際にはアプリケーションで使用されません。アプリケーションを別のデータベース サーバーに向ける唯一の方法は、設定ファイルの接続文字列を変更して再コンパイルすることです。これは明らかに正しくありません。

では、コンパイル後に接続文字列を編集できるように、このプロジェクトを変更するにはどうすればよいでしょうか。また、パスワードが平文で表示されないようにするにはどうすればよいですか?

初歩的な質問ですみません!

--- アリステア。

4

1 に答える 1

0

コンパイルおよびデプロイ後に「yourapp.exe.config」ファイルを変更する必要があります。bin\Debug または bin\Release フォルダーに app.config ファイルはありません。このようにして、データコンテキストのパラメーターなしのコンストラクターを使用できます。

    using (var ctx = new DataClasses1DataContext())
    {
    }

これに加えて、他のコンストラクターを使用して接続文字列または接続を渡すことができ、接続文字列を任意のファイルに保存して暗号化することができます。

    // load from encrypted file or whatever
    string connstring = "???";
    using (var ctx = new DataClasses1DataContext(connstring))
    {
    }
于 2013-07-07T12:26:13.397 に答える