2016-05-20 4 views
2

これまでのところ、私はデータベースに問い合わせる2つの方法を知っています。その1つは、MySQLのライブラリを使用することです。 "MySqlCommand"、 "MySqlDataReader"、 "MySqlConnection"を宣言し、組み込みのメソッドを利用する。Entity-Frameworkを使用しているときにクエリから文字列値を返すことはできますか?

もう1つは、Entity Framework(これは私が推奨するオプションです)です。

しかし、私はこの後の方法で少し問題に遭遇しました。私は個人的に私の知識不足を責めます。エンドユーザーにデータを伝達するとき、Entity-FrameworkはObservableCollection <>またはList <>を優先するように見えます。

これは、ビューでは、私は、Datagridまたはリストコントロールを使用していることを意味します。通常これは問題ありません。

しかし、ミックスでデータグリッドコントロールが必要ない場合はどうなりますか?クエリーの結果がテキストボックスに表示されるようにするにはどうすればよいですか?エンティティフレームワークの使用を犠牲にすることなく、以下をどのように行うことができますか?それも可能ですか?

 string config = "server=localhost; userid = root; database = databaseName"; 
     MySqlConnection con = new MySqlConnection(config); 

     MySqlDataReader reader = null; 

     // Run the select query 
     string query = "SELECT * FROM students WHERE id = " +id; 

     MySqlCommand command = new MySqlCommand(query, con); 
     con.Open(); 
     reader = command.ExecuteReader(); 

     while (reader.Read()) 
     { 
      // Put the results in the appropriate strings so I can databind them 
      string studentName = (string)reader["studentName"]; 

      string studentNum = (string)reader["studentNum"]; 

      ..... 
     } 
     con.Close(); 

エンティティフレームワークを利用してこれを行うにはどうすればよいですか?

+0

あなたはSingleOrDefault()の代わりに、ToListメソッド()または単純な反復処理を使用することができますあなたのリストの結果を介して、関連するテキストボックスに値を追加します。 – apomene

答えて

4

EF同等物:

// note, that this leads to SQL injections, 
// use parametrized queries instead! 
"SELECT * FROM students WHERE id = " +id 

は次のようになります。

var student = context.Students.Find(id) // this will lookup local data as well 

か:

var student = context.Students.Single(_ => _.Id == id) 

どちらも、単一Studentインスタンスではなく、シーケンス/コレクションを返します、そして、あなたはそのプロパティに、あなたのUIを結合するか、またはいつものようにそれらにアクセスすることができます

student.StudentName 
+0

申し訳ございません。それは理にかなっている。ちょっとした細部。私がバインドする必要があるこれらのプロパティにどのようにアクセスしますか?私はどのようにクエリが行われるのかを知ると、 'context.Students'と表示されますが、' context.students'の中の 'StudentName'フィールドはどのようにして見つけられますか? 私はそれのすべての終わりを意味します、私はまだ値を文字列またはintの中に入れる必要がありますか? – Offer

+0

@Offer:回答を更新しました。いつものようにプロパティを呼び出してください。 – Dennis

+0

それがそれでした。多くの感謝。 – Offer

3

そのような何かを試してみてください:このSQLクエリの

public static Studens GetStudent(int id) 
{  
    return context.Studens.SingleOrDefault(x=>x.Id == id); 
} 
+1

'.Any'と' .First'をしないでください。 '.SingleOrDefault()'を実行してください。 –

+0

@ DanielA.White多くのありがとうございます。私はすでにそれを変更しました。 – Marusyk

+2

なぜ戻りません 'return context.Studens.SingleOrDefault(x => x.Id == id); ' –

関連する問題