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

Ошибка добавления в базу данных записи, неверный id

14.05.2018, 21:06. Просмотров 352. Ответов 1
Метки нет (Все метки)

такая вот проблема:
The changes you requested to the table were not successful because they would create duplicate values in the index, primary key, or relationship. Change the data in the field or fields that contain duplicate data, remove the index, or redefine the index to permit duplicate entries and try again.
В интернете посмотрел и выяснил, что при попытки из listbox добавить более 1 записи (например 2) программа добавляет сначала 1 запись с id например 22, а потом вторую С ТАКИМ ЖЕ ID 22

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
75
76
using (StreamReader sr = new StreamReader("temp.txt", Encoding.UTF8))
            {
                while (true)
                {
                    //MessageBox.Show(Convert.ToString(sr.ReadLine()));
                    int counter = 0;
                    string line2;
                    while ((line2 = sr.ReadLine()) != null)
                    {
                        string ss = line2;
                        ss = new string(ss.TakeWhile(x => x != ')').ToArray());
                        string sf = ss;
                        string[] tokens_cat = sf.Split(new[] { "(" }, StringSplitOptions.None);
                        string sss = line2;
                        sss = new string(sss.TakeWhile(x => x != '[').ToArray());
                        string sff = sss;
                        string[] tokens_cost = sff.Split(new[] { ":" }, StringSplitOptions.None);
                        string ssss = line2;
                        ssss = new string(ssss.TakeWhile(x => x != '-').ToArray());
                        string sfff = ssss;
                        string[] tokens_name = sfff.Split(new[] { "%" }, StringSplitOptions.None);
                        string sssss = line2;
                        sssss = new string(sssss.TakeWhile(x => x != ']').ToArray());
                        string sffff = sssss;
                        string[] tokens_valuet = sffff.Split(new[] { "[" }, StringSplitOptions.None);
                        MessageBox.Show(tokens_name[1]+" "+tokens_cost[1] +" "+tokens_cat[1] +" "+tokens_valuet[1]);
                        counter++;
                        //string[] a = new string[8];
                        //a[0] = tokens_valuet[1];
                        foreach (var item in listBox11.Items)
                        {
                            MessageBox.Show(item.ToString());
                            if ((textBox1.Text != "") && (textBox2.Text != "") && (textBox3.Text != "") && (textBox4.Text != ""))
                            {
                                int c = Convert.ToInt32(tokens_valuet[1]);
                               
                                OleDbConnection cn = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\user.mdb");
                                OleDbDataAdapter DA;
                                DA = new OleDbDataAdapter("select CountM from SetM where NameM='" + tokens_name[1] + "'", cn);
                                DA.Fill(this.userDataSet1.SetM);
                                bindingSource1.DataSource = this.userDataSet1.SetM;
                                dataGridView1.DataSource = bindingSource1.DataSource;
                                cn.Close();
                                check_sum();
                                sum = sum - c;
                                MessageBox.Show(Convert.ToString(sum));
                                if (sum > 0)
                                {
                                    DA = new OleDbDataAdapter("delete from SetM where NameM='" + tokens_name[1] + "'", cn);
                                    DA.Fill(this.userDataSet1.SetM);
                                    bindingSource1.DataSource = this.userDataSet1.SetM;
                                    dataGridView1.DataSource = bindingSource1.DataSource;
                                    cn.Close();
                                    //int sum = sum - c;
                                    DA = new OleDbDataAdapter("INSERT INTO SetM (NameM, CountM, CostM, CatM) VALUES ('" + tokens_name[1] + "','" + sum + "', '" + tokens_cost[1] + "','" + tokens_cat[1] + "')", cn);
                                    DA.Fill(this.userDataSet1.SetM);
                                    bindingSource1.DataSource = this.userDataSet1.SetM;
                                    dataGridView1.DataSource = bindingSource1.DataSource;
                                    cn.Close();
                                    DA = new OleDbDataAdapter("INSERT INTO Price (NameU, LnameU, SnameU, NameP, ValueP, NumberP, CostP) VALUES ('" + textBox1.Text + "', '" + textBox2.Text + "', '" + textBox3.Text + "','" + tokens_name[1] + "','" + tokens_valuet[1] + "','" + textBox4.Text + "','" + tokens_cost[1] + "')", cn);
                                    DA.Fill(this.userDataSet1.Price);
                                    bindingSource1.DataSource = this.userDataSet1.Price;
                                    dataGridView1.DataSource = bindingSource1.DataSource;
                                    cn.Close(); 
                                }
                            }
                            else
                            {
                                MessageBox.Show("Введите данные!");
                                return;
                            }
                        }
                        
                    }
 
                }
Добавлено через 1 минуту
программа по сути считывает данные из файла, а listbox нужен ну только чтобы строки перебрать

Добавлено через 1 минуту
ОШИБКА В ЭТО СТРОКЕ
C#
1
DA = new OleDbDataAdapter("INSERT INTO Price (NameU, LnameU, SnameU, NameP, ValueP, NumberP, CostP) VALUES ('" + textBox1.Text + "', '" + textBox2.Text + "', '" + textBox3.Text + "','" + tokens_name[1] + "','" + tokens_valuet[1] + "','" + textBox4.Text + "','" + tokens_cost[1] + "')", cn);
Добавлено через 2 часа 2 минуты
ругается на эту строку
C#
1
DA.Fill(this.userDataSet1.Price);
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.05.2018, 21:06
Ответы с готовыми решениями:

Ввод данных в пустую таблицу выбранной записи и ошибка "входная строка имеет неверный формат"
ввожу данные в пустую таблицу выбранной записи таким образом if...

Передача данных в форму для добавления в базу
Здравствуйте. есть 2 формы, при нажатии на строку грида (любой из 2х форм) открывается 3я форма, в...

Ошибка добавления записи в БД при Identity = Yes
Подскажите пожалуйста как исправить эту ошибку. Есть строчка...

Подключить базу данных sql server к проекту и реализовать операции добавления, удаления и изменения
мне нужно подключить базу данных sql server к проекту и реализовать операции добавления, удаления и...

Ошибка при попытке добавления записи в базу данных (MySQL)
Qt 4.8.5, MySQL Community Server (mysql-5.5.23-win32.msi). Собрал драйвер под 10 студию (gmake,...

1
CorrupteD
0 / 0 / 1
Регистрация: 15.09.2017
Сообщений: 2
21.05.2018, 18:24  [ТС] 2
После долгих тестов и поиска решений на просторе интернета, решил создать проект заново, скажем так - для проверки целостности кода, в итоге такая же самая ошибка.
Причина возникновения ошибки - поле в базе данных имеет неверный формат или по простому - то поле, в которое пытаешься добавить данные стало индексированным. не поле "id" а обычное текстовое поле, причем причину создания такого поля я не выявил, видимо все таки человеческий фактор, ну в малой степени сама среда Access что то выкинула.
Совет при вылете такой ошибки:
1) проверьте все поля в базе, включая ключевое полу "id" или "Код" (уникальное, внешний ключ, совпадений нет);
2) проверьте логику работы программы, выполняйте пошагово клавишей F8, F6 или F11 (если не сильны в разработке, пробуйте вставлять MessageBox.Show("сообщение"); после каждой строки);
3) используйте конструкцию try и catch;
C#
1
2
3
4
5
6
7
try{
//код запроса
}
catch(Exeption ex){
//
MessageBox.Show(ex);
}
0
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.05.2018, 18:24

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

Пытаюсь добавить записи в базу данных.После добавления 5-7 записей вылетает ошибка.
Уважаемые коллеги. Проблема следующая. Пытаюсь добавить записи в базу данных.После добавления 5-7...

Ошибка добавления в базу данных
$code = random(5); $_SESSION = array( 'type' => 'register', 'email' => $_POST, 'name'...

Ошибка добавления информации в базу данных
Ошибка: "в качестве входных данных запрос должен иметь хотя бы одну таблицу или запрос". ...


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

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

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