Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Базы данных под .NET > Пробла с SELECT FROM c WHERE


Автор: Osp 14.3.2010, 20:55
Есть код 
Код

private void button1_Click(object sender, EventArgs e)
        {
            if (textBox1.Text.Length != 0 && textBox2.Text.Length != 0)
            {
                //Создание открытого подключения
                string connectionStr = @"Data Source=(local)\SQLEXPRESS;Initial Catalog=КИС;Integrated Security=SSPI;";
                SqlConnection dbConnection = new SqlConnection(connectionStr);
                dbConnection.Open();
                
                int id_w = int.Parse(textBox1.Text);
                string nam_w = textBox2.Text;
                string spec_w = comboBox1.Text;
                //MessageBox.Show(spec_w);
                string sqlSel = "SELECT id_spec_worker FROM spec_worker WHERE name_spec_worker = '" +spec_w+ "' ";
                using (SqlCommand command = new SqlCommand(sqlSel, dbConnection))
                {
                    //Отправляем команду
                    command.ExecuteNonQuery();
                }
                MessageBox.Show(sqlSel);
                
            }
            else
            {
                MessageBox.Show("Поля не заполнены");
            }
        }



Должно выводить код(id) специальности выбранной в comboBox1, а проблема в том что в messagebox выводит следующее
Код

SELECT id_spec_worker FROM spec_worker WHERE name_spec_worker = 'агент' 


В чем проблема может быть, не подскажете почему не выводить айди из базы данных по специальности агент....?

СПАСИБО!

Автор: Экскалупатор 14.3.2010, 21:24
Цитата(Osp @  14.3.2010,  19:55 Найти цитируемый пост)
Должно выводить код(id) специальности выбранной в comboBox1, а проблема в том что в messagebox выводит следующее
    
SELECT id_spec_worker FROM spec_worker WHERE name_spec_worker = 'агент' 

В чем проблема может быть, не подскажете почему не выводить айди из базы данных по специальности агент....?


потешно. нет правда, потешно. 
ты выводишь в меседжбокс не результат, а строку запроса.
Код

string sqlSel = "SELECT id_spec_worker FROM spec_worker WHERE name_spec_worker = '" +spec_w+ "' ";
                using (SqlCommand command = new SqlCommand(sqlSel, dbConnection))
                {
                    //Отправляем команду
                    command.ExecuteNonQuery();
                }
                MessageBox.Show(sqlSel);


выводить нужно не sqlSel, а результат этой строки:
//Отправляем команду
                    command.ExecuteNonQuery();

в твоем случае замени command.ExecuteNonQuery();
на command.ExecuteScalar();
почитать про эту штуку можно http://msdn.microsoft.com/ru-ru/library/system.data.sqlclient.sqlcommand.executescalar.aspx.
она должна тебе возвратить результат, и этот результат нужно передать в меседжбокс.

Автор: Osp 14.3.2010, 21:36
Код

{
                    //Отправляем команду
                    int count = (int)command.ExecuteScalar();
                }
                MessageBox.Show(count);



Пишет следующее - 

Код

Ошибка    1    Элемент "count" не существует в текущем контексте.    C:\Users\Yura\Documents\Visual Studio 2008\Projects\WindowsFormsApplication1\WindowsFormsApplication1\Empl.cs    65    33    WindowsFormsApplication1




Не могу понять в чем проблема?

Автор: Экскалупатор 14.3.2010, 21:57
Osp, я в предыдущем твоем топике уже говорил: "приобрети себе книжку по программированию". и там, в этой книжке, обычно в одном из первых разделов, есть такая глава как "Видимость переменных"(или "область видимости переменных") ты объявляешь переменную внутри блока using. это значит что эта переменная доступна только внутри этого блока(и только после(ниже) ее объявления). а пытаешься ты ее использовать вне области ее видимости. вывод: либо надо переменную объявить "выше" блока using, либо вывод меседжбокса переместить в блок using.

Автор: Osp 14.3.2010, 22:06
Спасибо!

Добавлено @ 22:09
Все работает, вот код может кому то пригодится:
Код

 private void button1_Click(object sender, EventArgs e)
        {
            if (textBox1.Text.Length != 0 && textBox2.Text.Length != 0)
            {
                //Создание открытого подключения
                string connectionStr = @"Data Source=(local)\SQLEXPRESS;Initial Catalog=КИС;Integrated Security=SSPI;";
                SqlConnection dbConnection = new SqlConnection(connectionStr);
                dbConnection.Open();
                
                int id_w = int.Parse(textBox1.Text);
                string nam_w = textBox2.Text;
                string spec_w = comboBox1.Text;
                //MessageBox.Show(spec_w);
                string sqlSel = "SELECT id_spec_worker FROM spec_worker WHERE name_spec_worker = '" +spec_w+ "' ";
                using (SqlCommand command = new SqlCommand(sqlSel, dbConnection))
                {
                    //Отправляем команду
                    int count = (int)command.ExecuteScalar();
                    string count1 = Convert.ToString(count);
                    MessageBox.Show(count1);
                }
                
             }
            else
            {
                MessageBox.Show("Поля не заполнены");
            }
        }

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)