Форум программистов, компьютерный форум, киберфорум
Наши страницы
C#: Базы данных, ADO.NET
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
Ali002
0 / 0 / 0
Регистрация: 08.04.2014
Сообщений: 102
1

Автоматически проставляемое поле ID

20.04.2014, 20:18. Просмотров 1623. Ответов 25
Метки нет (Все метки)

Программисты, как сделать чтобы полю ID автоматически присваивалось значение и отображалось в лэбле или в текстбоксе не суть важна где главное чтоб отображалось оно, в базе у него стоит своиство AUTOINCREMENT, но оно не проставляется тоесть отображается как пустое поле в текстбоксе.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.04.2014, 20:18
Ответы с готовыми решениями:

Как создать автоматически увеличиваемое поле?
можно ли в C# передать NULL в запросе? хочу сделать автоувеличиваемое поле,...

Как автоматически нажать на кнопку в WebBrowser-е, и вставить текст в текстовое поле?
здравствуйте, есть два баттона, первый нажимает в браузете на кнопку: ...

Автоматически обновить поле в форме при добавлении нового значения в поле со списком
помогите плииииз, у меня форма в ней поля: код(счетчик); фамилия(текст);...

В одном поле ввожу число в другом поле должно автоматически проставиться число
Как сделать чтобы например я ввёл в поле volume цифру 1 в поле price бы...

поле в форме "Студенты" - "Дата рождения". Как сделать,чтобы при переходе в данное поле автоматически появлялся календарь.
Есть поле в форме "Студенты" - "Дата рождения". Как сделать,чтобы при переходе...

25
nmcf
6521 / 5748 / 2618
Регистрация: 14.04.2014
Сообщений: 24,493
20.04.2014, 22:00 2
У колонки в DataTable есть свойство AutoIncrement. Здесь смотри http://msdn.microsoft.com/ru-ru/libr...vs.100%29.aspx

Добавлено через 1 минуту
Только чтобы это работало, надо новую строку добавлять в набор.
0
Ali002
0 / 0 / 0
Регистрация: 08.04.2014
Сообщений: 102
20.04.2014, 22:43  [ТС] 3
У меня итак оно поставлено autoinkrement. А как в набор добавлять то?
0
nmcf
6521 / 5748 / 2618
Регистрация: 14.04.2014
Сообщений: 24,493
20.04.2014, 22:50 4
Через DataTable. Если ты добавляешь просто командой, то формируй ID сам.
0
Ali002
0 / 0 / 0
Регистрация: 08.04.2014
Сообщений: 102
20.04.2014, 22:59  [ТС] 5
А как самому сформировать? Что то типа счётчика наращивать и присваивать это значение заявке?
0
nmcf
6521 / 5748 / 2618
Регистрация: 14.04.2014
Сообщений: 24,493
20.04.2014, 23:03 6
Петррр рекомендует так:
http://www.cyberforum.ru/csharp-begi...ml#post6065568
Это если ручной командой. А если через DataTable, то, например, найти максимальное в нём и прибавить 1.
0
Ali002
0 / 0 / 0
Регистрация: 08.04.2014
Сообщений: 102
20.04.2014, 23:05  [ТС] 7
А вот допустим с дататэйбл работать да вот я занёс его в набор а когда сохранять в БД его из набора дергать или значение id автоматически проставиться в базе
0
nmcf
6521 / 5748 / 2618
Регистрация: 14.04.2014
Сообщений: 24,493
20.04.2014, 23:10 8
Когда в DataTable добавляется новая строка, он должен сам формировать это поле. Только кроме AutoIncrement есть ещё 2 параметра - шаг и начальное значение.
1
Ali002
0 / 0 / 0
Регистрация: 08.04.2014
Сообщений: 102
21.04.2014, 15:04  [ТС] 9
Спасибо большое!!!круто

Добавлено через 15 часов 32 минуты
Я использую запрос чделал как вы и посоветовали но чет не пашет
C#
1
2
string  max = "INSERT INTO zayavka (id_zayavki, name_kompleks, tema_obucheniya, period_obuch_S, period_obuch_Do, istoch_finansir, FIO_ispolnitel, data_postupl) VALUES ((SELECT 1 + MAX(id_zayavki) FROM zayavka), @name)";
           //sqlClass.Autoincrement(max, "id_zayavki", label1);
объявляю в классе метод Autoincrement:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 public string Autoincrement(string SQLcommand, string id_zayavki, Label label)
        {
            string cellValue = null;
            using (connection)
            {
                MySqlCommand showresult = new MySqlCommand("INSERT INTO zayavka (id_zayavki) values (@id_zayavki)", connection);
                showresult.Parameters.AddWithValue(id_zayavki, label);
                this.OpenConnection();
                if (showresult.ExecuteScalar() != null)
                cellValue = showresult.ExecuteScalar().ToString();
                this.CloseConnection();
            }
            return cellValue;
        }
чото нужно исправить? я что то намудрил тут. извините заранее что обозначил ответ как не решенный
0
nmcf
6521 / 5748 / 2618
Регистрация: 14.04.2014
Сообщений: 24,493
21.04.2014, 15:31 10
Почему у тебя при вызове процедуры передаётся одна строка SQL, а в конструкторе MySQLCommand другая?
0
Ali002
0 / 0 / 0
Регистрация: 08.04.2014
Сообщений: 102
21.04.2014, 15:43  [ТС] 11
Косяк вот исправленный
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 private void button1_Click_1(object sender, EventArgs e)
        {  
                sqlClass.Autoincrement("@id_zayavki", label1);
 
                string zayav = "INSERT INTO zayavka (id_zayavki,name_kompleks, tema_obucheniya, period_obuch_S, period_obuch_Do, istoch_finansir, FIO_ispolnitel, data_postupl) VALUES (";
                zayav += "'" + label1.Text + "',";
            zayav += "'" + comboBox4.Text + "',";
                zayav += "'" + textBox1.Text + "',";
                zayav += "'" + dateTimePicker3.Text + "',";
                zayav += "'" + dateTimePicker2.Text + "')";
                zayav += "'" + textBox2.Text + "',";
                zayav += "'" + textBox3.Text + "',";
                zayav += "'" + dateTimePicker4.Text + "')";
                sqlClass.InsertUpdate(zayav);
 
                                  
        }
а в классе
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
  public string Autoincrement(string param, Label label)
        {
            string cellValue = null;
            using (connection)
            {
                MySqlCommand showresult = new MySqlCommand("INSERT INTO zayavka (id_zayavki) values (@id_zayavki)", connection);
                showresult.Parameters.AddWithValue(param, label);
                this.OpenConnection();
                if (showresult.ExecuteScalar() != null)
                cellValue = showresult.ExecuteScalar().ToString();
                this.CloseConnection();
            }
            return cellValue;
        }
0
nmcf
6521 / 5748 / 2618
Регистрация: 14.04.2014
Сообщений: 24,493
21.04.2014, 16:23 12
Это всё надо объединить в одно. Убери этот Autoincrement. Сделай в button1_Click_1:
C#
1
string zayav = "INSERT INTO zayavka (id_zayavki,name_kompleks, tema_obucheniya, period_obuch_S, period_obuch_Do, istoch_finansir, FIO_ispolnitel, data_postupl) VALUES ((SELECT 1 + MAX(id_zayavki) FROM zayavka),";
id_zayavki должен сам рассчитаться, его не надо в параметры добавлять не из каких Label.

Добавлено через 4 минуты
А, если ты хочешь рассчитать новый id через эту процедуру, тогда там команда будет
MySqlCommand showresult = new MySqlCommand("SELECT 1 + MAX(id_zayavki) FROM zayavka", connection);
0
Ali002
0 / 0 / 0
Регистрация: 08.04.2014
Сообщений: 102
21.04.2014, 16:43  [ТС] 13
уабрал автоинкремент и вставил вашу строку теперь выдает ересь на типах хотел картинку вставить не знаю как тут вставляются
вот код ошибки You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''dd','sd','21 Ð°Ð¿Ñ€ÐµÐ»Ñ 2014 г.')' at line 1
0
nmcf
6521 / 5748 / 2618
Регистрация: 14.04.2014
Сообщений: 24,493
21.04.2014, 16:49 14
Кавычки, наверное, где-то перепутаны. Используй параметры лучше для добавления значений в SQL строку.

Добавлено через 2 минуты
Чтобы картинку вставить, жмёшь расширенный режим и там скрепку, выбрать файл и загрузить.
0
Ali002
0 / 0 / 0
Регистрация: 08.04.2014
Сообщений: 102
21.04.2014, 17:11  [ТС] 15
теперь вот так выдает Column count doesn't match value count at row 1 а вот код все вроде исправил
C#
1
2
3
 string zayav = "INSERT INTO zayavka (id_zayavki, name_kompleks, tema_obucheniya, period_obuch_S, period_obuch_Do, istoch_finansir, FIO_ispolnitel, data_postupl) VALUES ((SELECT 1 + MAX(id_zayavki) FROM zayavka), '" + label1.Text + "', '" + comboBox4.Text + "', '" +
                    textBox1.Text + "', '" + dateTimePicker3.Text + "', '" + dateTimePicker2.Text + "', '" + "', '" + textBox2.Text + "', '" + "', '" + textBox3.Text + dateTimePicker4.Text + "')";
                          sqlClass.InsertUpdate(zayav);
возможно потому что в датагрид в начале пустой
0
nmcf
6521 / 5748 / 2618
Регистрация: 14.04.2014
Сообщений: 24,493
21.04.2014, 19:15 16
У тебя полей перечислено 8, а в VALUES() больше. Label.Text лишний.
0
Ali002
0 / 0 / 0
Регистрация: 08.04.2014
Сообщений: 102
21.04.2014, 19:24  [ТС] 17
я убрал его все равно та же ошибка , не смотря на то что в бд есть записи
0
nmcf
6521 / 5748 / 2618
Регистрация: 14.04.2014
Сообщений: 24,493
21.04.2014, 21:27 18
Посмотри в отладчике эту строку zayav, после того, как она сформируется и проверь, всё ли там правильно.
0
Ali002
0 / 0 / 0
Регистрация: 08.04.2014
Сообщений: 102
21.04.2014, 21:59  [ТС] 19
Тут ругается You can't specify target table 'zayavka' for update in FROM clause
Код
"INSERT INTO zayavka (id_zayavki, name_kompleks, tema_obucheniya, period_obucheniya_S, period_obucheniya_Do, istoch_finansir, FIO_ispolnitel, data_postupl) VALUES ((SELECT 1 + MAX(id_zayavki) FROM zayavka), '1', 'к', '21 апреля 2014 г.', '21 апреля 2014 г.', 'к', 'к', '21 апреля 2014 г.')"
0
nmcf
6521 / 5748 / 2618
Регистрация: 14.04.2014
Сообщений: 24,493
21.04.2014, 22:06 20
Выходит всё таки, вложенные Select не работают. Вернись тогда к ExecuteScalar. Сначала получи значение
"SELECT MAX(id_zayavki) FROM zayavka", потом увеличь на единицу и вставляй как параметр в Insert.
0
21.04.2014, 22:06
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.04.2014, 22:06

Автоматически заполнение поле ввода
Добрый вечер! Встала такая задача, есть обработка в который выбираем Услугу из...

Автоматически подтягивать соответствующее поле
Добрый день. Не могу догадаться как сделать, чтобы при выборе в сводной...

Автоматически выставить в поле текущую дату
Ребят всем доброго времени суток! объяснять не буду что мало что смыслю в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru