2016-04-05 2 views
0

В моей основной форме я запросил идентификатор пользователя при представлении. Как только я сохраню id в переменной, как я могу вызвать его в другой форме окна в том же приложении?Результат C# SQL как переменная

Это то, что я до сих пор

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#] (http://stackoverflow.com/questions/1665533/communicate-between-two-windows-forms-in-c-sharp) –

+0

Что делать, если чье-либо имя пользователя ' '; пользователи таблицы drop - '? –

+0

[SQL Injection alert] (http://msdn.microsoft.com/en-us/library/ms161953%28v=sql.105%29.aspx) - вы должны ** не ** объединять свои SQL-запросы - использовать ** параметризованные запросы ** вместо этого, чтобы избежать SQL-инъекций –

ответ

0

Если вы используете метод ExecuteScalar(), важно помнить, что это приведет к возврату содержимого первой ячейки в ваших результатах, поэтому она может в целом помочь использовать в сочетании с оператором TOP 1.

Кроме того, следует рассмотреть вопрос рефакторинга кода, чтобы использовать параметризацию, который должен помочь избежать гадости как SQL Injection и также поможет смягчить любые синтаксические вопросы:

// 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;}); 
} 

В каждой из ваших заинтересованных форм подпишитесь на мероприятия. При обработке обновите свой графический интерфейс, как хотите.