2016-04-05 14 views
0

私のメインフォームで、投稿時にユーザーIDを問い合わせました。一度私は変数にIDを保存する私は同じアプリケーションで別のWindowsフォームで呼び出すことができますか?C#SQL結果を変数として

これは、すべての情報がいただければ幸い私は、私は本当に複数の他のページのIDをこれまで

private void btnLogin_Click(object sender, EventArgs e) 
    { 
     SqlConnection con = new SqlConnection("Data Source=.database.windows.net;Initial Catalog=userlogins;Persist Security Info=True;User ID=****;Password=****"); 
     SqlDataAdapter sda = new SqlDataAdapter("Select ID from users where username='" + txtUsername.Text + "' and password='" + txtPassword.Text + "' ", con); 
     SqlCommand cmd = con.CreateCommand(); 
     con.Open(); 

     // save SQL ID to variable 
     cmd.CommandText = "Select Id from users where username = '" + txtUsername.Text + "'"; 
     int sqlid = ((int)cmd.ExecuteScalar()); 

必要になったものです!

+1

[C#で2つのウィンドウフォーム間で通信する]の可能な複製(http://stackoverflow.com/questions/1665533/communicate-between-two-windows-forms-in-c-sharp) –

+0

ユーザー名が'';ドロップテーブルのユーザー - '? –

+0

[SQLインジェクションアラート](http://msdn.microsoft.com/en-us/library/ms161953%28v=sql.105%29.aspx)** SQL文を連結しない**使用する** SQLインジェクションを避けるための代わりに**パラメータ化されたクエリ –

答えて

0

ExecuteScalar()メソッドを使用している場合は、結果の最初のセルの内容のみが返されるため、一般的にTOP 1ステートメントと併用すると便利です。

また、SQLインジェクションのような意地の悪さを避けるのを助ける必要があり、また、任意の構文上の問題を軽減するのに役立つであろう、パラメータを使用するようにコードをリファクタリングを検討する必要があります。これを行うには

// Build your connection 
using(var con = new SqlConnection("your-connection-string")) 
{ 
    // Build your query 
    var query = "SELECT TOP 1 ID FROM users WHERE username = @username AND password = @password"; 
    // Build a command to execute your query 
    using(var cmd = new SqlCommand(con,query)) 
    { 
      // Open your connection 
      con.Open(); 
      // Add your parameters 
      cmd.Parameters.AddWithValue("@username", txtUsername.Text); 
      cmd.Parameters.AddWithValue("@password", txtPassword.Text); 

      // Get your ID 
      var sqlid = Convert.ToInt32(cmd.ExecuteScalar()); 
      // Do something here 
    } 
} 
0

一つの方法は、イベントである:

public class IdChangedEventArgs : EventArgs 
{ 
    int ChangedId {get;set;}; 
} 

public delegate void IdChangedEventHandler(object sender, IdChangedEventArgs e); 
public event IdChangedEventHandler IdChangedEvent; 
private void btnLogin_Click(object sender, EventArgs e) 
{ 
    int sqlid = ((int)cmd.ExecuteScalar()); 
    IdChangedEvent(this, new IdChangedEventArgs {ChangedId = sqlid;}); 
} 

各興味のあるフォームで、イベントを購読してください。処理するときは、必要に応じてGUIを更新してください。

関連する問題