2014-12-11 2 views
0

Как сохранить результаты запроса для получения местоположения, чтобы я мог использовать его в другом приватном методе void? Я попытался использовать сессию, но мне не удалось заставить ее работать. C# всегда подчеркивает, что часть его красная. Любые идеи были бы полезны. Ниже приводится информация о том, как я извлекаю информацию из БД.Использовать результат запроса в другом приватном методе

private void LoginButton_Click(object sender, EventArgs e) 
    { 

string commandText = "SELECT RIGHTS FROM [USER] WHERE [email protected] and [Password][email protected]"; 
    using (OleDbCommand command = new OleDbCommand(commandText, con)) 
    { 
     command.Parameters.AddWithValue("@p1", textBox1.Text); 
     command.Parameters.AddWithValue("@p2", textBox2.Text); 
     string query = (string)command.ExecuteScalar(); 
     { 

     if (query == "Manager") 
     { 
      string locationText = "SELECT LOCATION FROM [USER] WHERE [email protected] and [Password][email protected]"; 
      using (OleDbCommand location = new OleDbCommand(locationText, con)) 
      { 
      location.Parameters.AddWithValue("@p1", textBox1.Text); 
      location.Parameters.AddWithValue("@p2", textBox2.Text); 
      string locationResult = (string)command.ExecuteScalar(); 
      { 

      } 
     } 
    } 
    } 

Тогда я хочу, чтобы использовать его в этом коде в виде же окна, так что это только показывает расположение, что пользователь является частью.

private void groupBox5_Enter(object sender, EventArgs e) 
    { 
     //Load Employee Name 
     using (OleDbConnection con = new OleDbConnection(constring)) 
     { 
      try 
      { 
       string query = "SELECT TellerNum FROM EMPLOYEE WHERE Location = locationResult ORDER BY TellerNum ASC"; 
       OleDbDataAdapter da = new OleDbDataAdapter(query, con); 
       con.Open(); 
       DataSet ds = new DataSet(); 
       da.Fill(ds, "Name"); 
       comboBox14.DisplayMember = "TellerNum"; 
       comboBox14.DataSource = ds.Tables["Name"]; 
       con.Close(); 
      } 
      catch (Exception ex) 
      { 
       MessageBox.Show(ex.Message); 
      } 
     } 
    } 

Я не уверен, как вызвать результат первого запроса и поместить его во второй. Я помещаю «locationResult» в запрос, поэтому я помню, что именно там мне это нужно. Если у вас есть какие-то идеи, я бы с удовольствием их услышал.

ответ

1

Объявление string locationResult за пределами функции под названием LoginButton_Click на уровне страницы.

Say private string locationResult

Затем установите значение этой переменной

private void LoginButton_Click(object sender, EventArgs e) 
{ 
//.... all your code 

    locationResult = (string)command.ExecuteScalar(); 
} 

Тогда под второй функции, используйте это значение переменной в SQL запросе

private void groupBox5_Enter(object sender, EventArgs e) 
{ 
//.... all your code 

string query = "SELECT TellerNum FROM EMPLOYEE WHERE Location ='" + locationResult + "' ORDER BY TellerNum ASC"; 

//...all your code 

} 
+0

Удивительный. Это работает отлично. – JoeMarvel

1

Вы можете сохранить результаты первого запроса в поле класса. Просто создайте:

private string LocationFromQuery; 

Поле в вашем классе и присвоить ему значение.

+0

Я фактически использовал комбинацию вашего ответа и Piyush. Спасибо за помощь. – JoeMarvel

1

Может быть, вы должны использовать глобальные переменные.

private string Location=""; 

private void LoginButton_Click(object sender, EventArgs e) 
    { 

string commandText = "SELECT RIGHTS FROM [USER] WHERE [email protected] and [Password][email protected]"; 
    using (OleDbCommand command = new OleDbCommand(commandText, con)) 
    { 
     command.Parameters.AddWithValue("@p1", textBox1.Text); 
     command.Parameters.AddWithValue("@p2", textBox2.Text); 
     string query = (string)command.ExecuteScalar(); 
     { 

     if (query == "Manager") 
     { 
      string locationText = "SELECT LOCATION FROM [USER] WHERE [email protected] and [Password][email protected]"; 
      using (OleDbCommand location = new OleDbCommand(locationText, con)) 
      { 
      location.Parameters.AddWithValue("@p1", textBox1.Text); 
      location.Parameters.AddWithValue("@p2", textBox2.Text); 
      string Location = (string)command.ExecuteScalar(); 
      { 

      } 
     } 
    } 
    } 

private void groupBox5_Enter(object sender, EventArgs e) 
{ 
    if(!Location.Equals("")){ 
    //Load Employee Name 
    using (OleDbConnection con = new OleDbConnection(constring)) 
    { 
     try 
     { 
      string query = "SELECT TellerNum FROM EMPLOYEE WHERE Location = @p1 ORDER  BY TellerNum ASC"; 
      location.Parameters.AddWithValue("@p1", Location); 
      OleDbDataAdapter da = new OleDbDataAdapter(query, con); 
      con.Open(); 
      DataSet ds = new DataSet(); 
      da.Fill(ds, "Name"); 
      comboBox14.DisplayMember = "TellerNum"; 
      comboBox14.DataSource = ds.Tables["Name"]; 
      con.Close(); 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.Message); 
     } 
     } 
    } 
} 

Я не пробовал этот код, но что-то вроде этого вам нужно сделать, чтобы он работал.

Но я думаю, что это не слишком удача, чтобы поместить код обработки базы данных в gui. Вы должны прочитать о MVC и MVP.

+0

Это не «глобальные» переменные. Это просто переменные экземпляра класса. – mason

+0

В этом случае параметры не работают. Это требует другого способа использования «использования». Тем не менее, я считаю, что я буду использовать часть if (! Location.Equals (""), поэтому спасибо. – JoeMarvel

Смежные вопросы