powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / SQL запрос в С# на FireBird
25 сообщений из 67, страница 1 из 3
SQL запрос в С# на FireBird
    #38437466
greshnik_05
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Имеется 4 текстбокса на форме и есть кнопка по нажатию которй происходит UPDATE запрос на сервер FireBird.
Проблема в том что этот UPDATE запрос не идет, данные не обновляются в чем может быть причина?
Код прилагается.

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
 private void btnSave_Click(object sender, EventArgs e)
        {

            string SQLString = "Update SPR_SVOI SET name = '" + textBox1.Text + "', dir = '" + textBox2.Text + "', tel = '" + textBox3.Text + "', email = '" + textBox4.Text + "'";
            FbCommand UpdateCommand = new FbCommand(SQLString, frmGeneral.fbConnection);
            
            if (frmGeneral.fbConnection.State == ConnectionState.Closed)
            {
                frmGeneral.fbConnection.Open();
            }

            FbTransaction fbTransact = frmGeneral.fbConnection.BeginTransaction();// стартуем транзакцию
            UpdateCommand.Transaction = fbTransact;
           
            try
            {
                UpdateCommand.ExecuteNonQuery();//выполняем запрос на UPDATE
                fbTransact.Commit();// коммит транзакции если запрос прошел успешно
            }
            catch (FbException fbex)
            {
                MessageBox.Show(fbex.Message, "Внимание!");
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Внимание!!!");
            }
            finally
            {
                UpdateCommand.Dispose();//в документации написано, что ОЧЕНЬ рекомендуется убивать объекты этого типа, если они больше не нужны
                frmGeneral.fbConnection.Close();
            }
            
        }




Этот Update запрос выполнял в IBExperte'e там всё норма. Перенес сюда - не пашет. (((
...
Рейтинг: 0 / 0
SQL запрос в С# на FireBird
    #38437546
Alex Kuznetsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
greshnik_05,

Хрустальный шар говорит, что проблема в 150-й строке...
...
Рейтинг: 0 / 0
SQL запрос в С# на FireBird
    #38437562
greshnik_05
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хрустальный шар ошибся, там нет столько строк!
...
Рейтинг: 0 / 0
SQL запрос в С# на FireBird
    #38437581
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: c#
1.
"Update SPR_SVOI SET name = '" + textBox1.Text + "', dir = '" + textBox2.Text + "', tel = '" + textBox3.Text + "', email = '" + textBox4.Text + "'"


ну-ну
...
Рейтинг: 0 / 0
SQL запрос в С# на FireBird
    #38437594
Alex Kuznetsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
greshnik_05,

Ну, ежели так, то что говорят сообщения об ошибке?
Отладчиком пробовали проходить?
Соединение правильно настроено?

В общем, хрустальный шар говорит, что ХЗ пока что в чём ошибка...
...
Рейтинг: 0 / 0
SQL запрос в С# на FireBird
    #38437596
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex Kuznetsov,
посмотрите сколько строк затронуто запросом, или там вообще 0, ели вернет все строки, это же ламмерский запрос, модифицирует все строки в таблице, да еще ..... .. ( махнул рукой )
...
Рейтинг: 0 / 0
SQL запрос в С# на FireBird
    #38437670
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. Держать глобальный объект соединения и тем паче проверять на открытость не нужно - делаешь для любого запроса всегда так
Код: c#
1.
2.
3.
4.
5.
using (FbCOnnection conn_ = new FbConnection(connectionString))
{
     conn_.Open();
     ....
}


по выходу из using соединение сделает Dispose само
2. Транзакция здесь не нужна - в ней вообще смысла нет
3. Где 'where' в запросе - или ты все строки в таблице заапдейтить хочешь.
4. Запрос хоть и маленький, но лучше все параметры оформлять как параметры, а не формировать запрос вручную - так избавишься от проблем преобразования типов и дурацких ошибок
...
Рейтинг: 0 / 0
SQL запрос в С# на FireBird
    #38437675
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
5. И не надо такой код писать в обработчике нажатия кнопки. Надо так
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
private void btnSave_Click(object sender, EventArgs e)
{
     if (DoSomeShit())
     {
          MessageBox("Получилось!");
     }
}

public bool DoSomeShit()
{
     ....
     return boolResult;
}
...
Рейтинг: 0 / 0
SQL запрос в С# на FireBird
    #38437992
greshnik_05
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Учитывая все вышеописанные замечания, переделаю и отпишусь в случае чего. Спасибо!
...
Рейтинг: 0 / 0
SQL запрос в С# на FireBird
    #38438020
greshnik_05
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ах да... Код программы писал исходя из этой статьи
тынц
...
Рейтинг: 0 / 0
SQL запрос в С# на FireBird
    #38438098
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
greshnik_05,
не читайте разные глупости, тем более любителей д. донцовой
автор Информации по этой теме оказалось катастрофически мало как на русском, так и на английском. Кроме документации по Firebird ADO.NET Data Provider, в принципе, ничего больше нет.
в технологии доступа используется ado.net подостренный на интерфейсах, и абсолютно никакой разницы нет к какому хранилищу обращаться от поставщика данных net, отсюда следует, что можно исполнить такой код, что модифицируя пару строчек этого кода,
можно обратиться к любому типу хранилищ ( при условии что к нему реализован поставщик). То есть вы должны видеть стратегию решения, реализуемою через интерфейсы, а тактика - это плюшки корыте разработчики провайдеров добавили в свои длл..
...
Рейтинг: 0 / 0
SQL запрос в С# на FireBird
    #38438108
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
greshnik_05,
вот что бы было понятно, задание..
Напиши код получения данных
1 какой тип хранилища - не знаю пока...
2 строка подключения - не знаю пока...
3 строка запроса - не знаю пока...
...
Рейтинг: 0 / 0
SQL запрос в С# на FireBird
    #38438113
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
о плюшках, если не изменяет память там уже реализована форма для собирания строки подключения...
...
Рейтинг: 0 / 0
SQL запрос в С# на FireBird
    #38438324
greshnik_05
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Где-то в степи, спасибо я учту
...
Рейтинг: 0 / 0
SQL запрос в С# на FireBird
    #38438368
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
greshnik_05,
вот почитайте про стандартизацию http://professorweb.ru/my/ADO_NET/base/level1/1_2.php
...
Рейтинг: 0 / 0
SQL запрос в С# на FireBird
    #38438417
greshnik_05
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Где-то в степиgreshnik_05,
вот почитайте про стандартизацию http://professorweb.ru/my/ADO_NET/base/level1/1_2.php
ОК

После вышеупомянутых замечаний переделал и всё работает. Теперь всё выглядит таким образом

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
private bool UpdateCommand()
        {
            using (FbConnection fbConnect = new FbConnection(frmGeneral.fbConnectionString.ToString()))
            {
                //открываем подключение
                fbConnect.Open();
                //создаем новую команду на UPDATE
                FbCommand SQLCommand = new FbCommand("Update SPR_SVOI SET NAME = @NAME, DIR = @DIR, TEL = @TEL, EMAIL = @EMAIL WHERE ID = 1", fbConnect);

                //обьявляем обьект класса FbParameter
                FbParameter parameter = new FbParameter();
                //задаем имя параметра
                parameter.ParameterName = "@NAME";
                //задаем значение параметра
                parameter.Value = textBoxName.Text;
                //задаем тип параметра
                parameter.FbDbType = FbDbType.VarChar;
                //передаем параметр обьекту класса FbCommand
                SQLCommand.Parameters.Add(parameter);

                //переопределяем обьект класса FbParameter
                parameter = new FbParameter();
                //задаем имя параметра
                parameter.ParameterName = "@DIR";
                //задаем значение параметра
                parameter.Value = textBoxDirector.Text;
                //задаем тип параметра
                parameter.FbDbType = FbDbType.VarChar;
                //передаем параметр обьекту класса FbCommand
                SQLCommand.Parameters.Add(parameter);

                //переопределяем обьект класса FbParameter
                parameter = new FbParameter();
                //задаем имя параметра
                parameter.ParameterName = "@TEL";
                //задаем значение параметра
                parameter.Value = textBoxTelefon.Text;
                //задаем тип параметра
                parameter.FbDbType = FbDbType.VarChar;
                //передаем параметр обьекту класса FbCommand
                SQLCommand.Parameters.Add(parameter);

                //переопределяем обьект класса FbParameter
                parameter = new FbParameter();
                //задаем имя параметра
                parameter.ParameterName = "@EMAIL";
                //задаем значение параметра
                parameter.Value = textBoxEmail.Text;
                //задаем тип параметра
                parameter.FbDbType = FbDbType.VarChar;
                //передаем параметр обьекту класса FbCommand
                SQLCommand.Parameters.Add(parameter);

                //выполняем запрос 
                try
                {
                    SQLCommand.ExecuteNonQuery();
                    return true;
                }
                catch (FbException FbExcept)
                {
                    MessageBox.Show("Сообщение ошибки: " + FbExcept.Message + ". Номер ошики: " + FbExcept.ErrorCode.ToString(), "Вниание!!!");
                    return false;
                }
            }//using; по выходу из using соединение сделает Dispose само
        }

private void btnSave_Click(object sender, EventArgs e)
        {
            if (UpdateCommand())
            {
                MessageBox.Show("Данные успешно сохраннены!", "Внимание!!!");
            }
        }


...
Рейтинг: 0 / 0
SQL запрос в С# на FireBird
    #38438678
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
greshnik_05,

1) SqlCommand тоже поддерживает IDisposable
2) Разве у SqlCommand.Parameters нет метода AddWithValue?
3) Имеет ли смысл именно в приватном методе делать обработку ошибок? К тому же у вас просто перехватываются FbException. Это значит, что при отваливании сети ошибка может быть не обработана. Нужно еще ApplicationException/Exception
...
Рейтинг: 0 / 0
SQL запрос в С# на FireBird
    #38441692
greshnik_05
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как правильно обновить gridview (DevExpress) ну или обычный datagridview после добавления, редактирования и удаления одной строки в таблице?
В данный момент я делаю так. Создал функцию заполнения gridview'а (использую DevExpress компонент)и вызываю данную функцию (код прилагается нижу) после вышеописанных событий. При большом объеме данных такой метод вызовет ахтунг. Как этого избежать?

Код: c#
1.
2.
3.
4.
5.
6.
7.
private void InitializeGridView()
        {
            FbDataAdapter fbDataAdapter = new FbDataAdapter("Select * From spr_mfc", FireBird.fbConnectionString.ToString());
            DataSet fbDataSet = new DataSet();
            fbDataAdapter.Fill(fbDataSet);
            gridControl1.DataSource = fbDataSet.Tables[0];
        }
...
Рейтинг: 0 / 0
SQL запрос в С# на FireBird
    #38441712
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
greshnik_05,

не загружать весь объем данных
...
Рейтинг: 0 / 0
SQL запрос в С# на FireBird
    #38441729
greshnik_05
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
как правильно это сделать??? сделать select запрос где id = последняя добавленная запись, а потом добавить результат в датагрид к уже имеющимся данным???
...
Рейтинг: 0 / 0
SQL запрос в С# на FireBird
    #38441733
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
К тому же, если ты изменяешь, добавляешь или удаляешь запись через грид и биндингсурс, то ничего обновлять как-бы и не надо - все уже на экране. Просто Adapter.Update() да и все.
...
Рейтинг: 0 / 0
SQL запрос в С# на FireBird
    #38441740
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
greshnik_05как правильно это сделать???

Например можно использовать постраничный вывод.
Код: c#
1.
select first 20 skip 20 * from table



даст тебе 20 записей начиная с 21ой
...
Рейтинг: 0 / 0
SQL запрос в С# на FireBird
    #38441746
greshnik_05
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PallarisК тому же, если ты изменяешь, добавляешь или удаляешь запись через грид и биндингсурс, то ничего обновлять как-бы и не надо - все уже на экране. Просто Adapter.Update() да и все.

Нет. я делаю это следующим образом по кнопке Добавить (Изменить) выводится новое окно где есть текстбоксы и 2 кнопки Сохранить и Закрыть. Забиваю данные в текстбоксы и жму кнопку Сохранить. А потом после закрытия формы вызызваю выше описанную функцию которая заново датагрид и заполняет. Вот!
...
Рейтинг: 0 / 0
SQL запрос в С# на FireBird
    #38441756
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
greshnik_05,
Все неправильно.
К BindingSource прицеплен DataTable
По кнопке "Сохранить" должны выполняться операции с BindingSource (AddNew - если добавить, поменять current - если изменить). После этого вызываешь Adapter.Update(DataTable). У Adaptera должны быть настроены команды Update, Delete, Insert
...
Рейтинг: 0 / 0
SQL запрос в С# на FireBird
    #38441771
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
greshnik_05, поплыл........
а кто знает почему в селекте писать (*) стрёмно?
...
Рейтинг: 0 / 0
25 сообщений из 67, страница 1 из 3
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / SQL запрос в С# на FireBird
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]