2

MYSQL データベースに接続するアプリケーションがあります。Entity Framework を使用してすべての作業を行います。最初にインストールしたとき、エンティティをセットアップしたところ、次のような接続文字列になりました。

<connectionStrings>
<add name="networkingEntities" connectionString="metadata=res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl;provider=MySql.Data.MySqlClient;provider connection string="server=localhost;user id=root;password=lucian;persist security info=True;database=networking"" providerName="System.Data.EntityClient"/>
</connectionStrings>  

現在、私のアプリケーションには、管理者と学生の 2 人のユーザーがいます。

Form1 => データベースおよびサーバーからの情報を更新します

ログインフォーム=>ユーザー認証

MainForm => すべてのアクションが参加する場所。管理者がログインしている場合、データベースの内容を変更できます

データベース: root と lucian の 2 人のユーザーがいます。

「lucian」は限定ユーザー…

今、私の問題は次のとおりです。

既存の接続文字列に 2 つ目の接続文字列を追加し、実行時にその接続文字列を選択するにはどうすればよいですか? つまり、Form1 が実行されているときに、スレッドをスリープ状態にし、2 番目の接続文字列を選択してから、ログイン フォームに移動し、管理者としてログインして、cnahge をデータベースの罪にしますか?

また、外部ファイルから接続文字列からログイン情報を取得するにはどうすればよいですか?

4

2 に答える 2

0

私が見る限りでは、Entity Framework によって接続文字列が app.config に追加された結果として、最初に EF DB またはモデルを使用しました。2 番目の接続文字列が同じデータベースを指す必要がある場合は、新しい DataModel をプロジェクトに追加し、選択したデータベースを指すようにして、そこからモデルを生成します。その後、EF が接続文字列を作成します。

2 番目の接続文字列をターゲットにします。

// by name attribute from the app.config/web.config
ConfigurationManager.ConnectionStrings["networkingEntities"].ConnectionString; connection string.
// or select by index.
var index = 0;
var adminConnectionString = ConfigurationManager.ConntectionString[++index];
var userConnectionString = ConfigurationManager.ConnectionString[index];

あなたの答えに編集してください。こんにちは、私もこのトピックに興味があるので、簡単にグーグルで検索したところ、次のものが見つかりました : http://msdn.microsoft.com/en-us/library/system.configuration.sectioninformation.protectsection.aspxいくつかの便利な組み込みメカニズムが利用可能です。私もこのトピックに慣れていないので、それがどのように使用されているかについてはすぐには答えられません. GL HF

于 2013-05-14T20:03:39.067 に答える
0

これが私が解決した方法です:
1. App.configを次のように変更しました:

 <connectionstrings configsource="DatabaseConnectionDetails.config" />;

これは DatabaseConnectionDetails.config です。

<connectionstrings>
    <add name="networkingEntities" connectionstring="metadata=res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl;provider=MySql.Data.MySqlClient;provider connection string=&quot;server=localhost;user id=lucian;password=lucian;persist security info=True;database=networking&quot;" providername="System.Data.EntityClient" />
    <add name="networkingEntitiesAdmin" connectionstring="metadata=res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl;provider=MySql.Data.MySqlClient;provider connection string=&quot;server=localhost;user id=root;password=lucian;persist security info=True;database=networking&quot;" providername="System.Data.EntityClient" />
  </connectionstrings>

* 2. * Model1.Context.tt テンプレートに文字列パラメーターを持つコンストラクターを追加:

 public <#=code.Escape(container)#>(string myString)
        : base(myString)
    {
<#
if (!loader.IsLazyLoadingEnabled(container))
{
#>
        this.Configuration.LazyLoadingEnabled = false;
<#
}
#>
    }  

* 3. *接続文字列を次のように取得します。

string  str = ConfigurationManager.ConnectionStrings["networkingEntitiesAdmin"].ConnectionString;

* 4. *そして、context を使用したいときはいつでも (例えば) 使用します:

networkingEntities net=new networkingEntities(str);


public List<utilizator> ListaUtilizatori()
        {

            var query = from u in net.utilizator
                        select u;
            List<utilizator> users = new List<utilizator>();
            try
            {
                users = query.ToList();
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }
            return users;
        }

今、私はまだ構成ファイルを暗号化する方法を発見する必要があります....助けてくれてありがとう...

于 2013-05-14T21:01:17.553 に答える