Пишу тестовую программу на C# (VisualStudio 2019 Enterprise) для работы с базой Access. Связи с двумя таблицами сделаны на уровне МАСТЕРА при работе с компонентами, то есть без личного написания кода. А вот вставку, редактирование, удаление пишу самостоятельно. Прошу обратить внимание на комментарий в исходнике - "// Работает НЕПРАВИЛЬНО!!!!!!!!!!!!!! Надо исправить. " Если можно и несложно, помогите мне исправить ошибки, не переделывая глобально весь проект. Я по шагам потом себе усложняю все задачи и переделаю код в лучший вариант для серьезных проектов. Что сейчас это для самостоятельного разбора и изучения в программирования баз данных на C#. Другие недостатки такие как повторение строк подключения в разных местах - это можно позже исправить и сократить код. Буду благодарен, если реализуете удаление и обновление(редактирование). Я понял, что в случае в связанных с несколькими таблицами мне не реализовать. Нашел в инете гору примеров, но там имена таблиц, полей, и прочее очень схожие, например, имя таблицы и имя поля совпадают или похожи... В результате я не смог воспользоваться их примерами. Очень неудачные примеры. В моем примере все имена отличаются.... Хотя бы даст толчок, чтобы прояснить что и с чем соединять....
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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
| using System;
using System.Data;
using System.Data.OleDb;
using System.Windows.Forms;
namespace ExampleDB4
{
public partial class Form1 : Form
{
private OleDbConnection con;
private OleDbCommand cmd;
private OleDbDataAdapter da;
private DataSet ds;
public Form1()
{
InitializeComponent();
}
//---------------------------------------------------------------------
private void UpdateDataObject() // Работает ПРАВИЛЬНО.
{
con = new OleDbConnection(@"Provider = Microsoft.ACE.OLEDB.12.0; Data Source =C:\Users\LEGION\source\repos\ExampleDB4\ExampleDB4\Example100.accdb");
da = new OleDbDataAdapter("SELECT * FROM MyTable1", con);
ds = new DataSet();
con.Open();
da.Fill(ds, "MyTable1");
dataGridView1.DataSource = ds.Tables["MyTable1"];
con.Close();
}
//---------------------------------------------------------------------
private void UpdateDataClass() // Работает НЕПРАВИЛЬНО!!!!!!!!!!!!!! Надо исправить.
{ // Это обновление данных подчиненной таблицы 2
con = new OleDbConnection(@"Provider = Microsoft.ACE.OLEDB.12.0; Data Source =C:\Users\LEGION\source\repos\ExampleDB4\ExampleDB4\Example100.accdb");
//da = new OleDbDataAdapter("SELECT * FROM MyTable2", con); // Не работает
da = new OleDbDataAdapter("SELECT * FROM MyTable2 where MyObject=(Select MyObject From MyTable1)", con); // тоже не работает, из за нее ниже ошибка появляется
ds = new DataSet();
con.Open();
da.Fill(ds, "MyTable2");
dataGridView1.DataSource = ds.Tables["MyTable2"];
con.Close();
}
//---------------------------------------------------------------------
private void Form1_Load(object sender, EventArgs e) // Работает ПРАВИЛЬНО. Сформировано автоматически, кроме 2 последних строк.
{
// TODO: данная строка кода позволяет загрузить данные в таблицу "example100DataSet.MyTable2". При необходимости она может быть перемещена или удалена.
this.myTable2TableAdapter.Fill(this.example100DataSet.MyTable2);
// TODO: данная строка кода позволяет загрузить данные в таблицу "example100DataSet.MyTable1". При необходимости она может быть перемещена или удалена.
this.myTable1TableAdapter.Fill(this.example100DataSet.MyTable1);
dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
dataGridView2.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
}
//---------------------------------------------------------------------
private void Button1_Click(object sender, EventArgs e) // Работает ПРАВИЛЬНО.
{
string query = "Insert into MyTable1(MyObject) values (@mObj)";
try
{
con = new OleDbConnection(@"Provider = Microsoft.ACE.OLEDB.12.0; Data Source =C:\Users\LEGION\source\repos\ExampleDB4\ExampleDB4\Example100.accdb");
cmd = new OleDbCommand(query, con);
cmd.Parameters.AddWithValue("@mObj", textBox1.Text);
con.Open();
cmd.ExecuteNonQuery();
con.Close();
}
catch (Exception Err)
{
MessageBox.Show(Err.Message);
}
UpdateDataObject();
}
//---------------------------------------------------------------------
private void Button2_Click(object sender, EventArgs e) // Работает НЕПРАВИЛЬНО!!!!!!!!!!!!!! Надо исправить.
{
string query = "Insert into MyTable2(MyClass) SELECT @mObj FROM MyTable1(MyObject) values (@mObj, mClass)"; // Основная ОШИБКА!!!!!!!!!!!
try
{
con = new OleDbConnection(@"Provider = Microsoft.ACE.OLEDB.12.0; Data Source =C:\Users\LEGION\source\repos\ExampleDB4\ExampleDB4\Example100.accdb");
cmd = new OleDbCommand(query, con);
cmd.Parameters.AddWithValue("@mObj", dataGridView1.CurrentCell.Value.ToString()); //???????
cmd.Parameters.AddWithValue("@mClass", textBox2.Text); //???????
con.Open();
cmd.ExecuteNonQuery();
con.Close();
}
catch (Exception Err)
{
MessageBox.Show(Err.Message);
}
//UpdateDataClass(); // Эту функцию надо тоже исправить!!!!!!
}
private void DataGridView1_Click(object sender, EventArgs e) // Работает ПРАВИЛЬНО.
{
//---------------
try
{
textBox1.Text = dataGridView1.CurrentRow.Cells[0].Value.ToString();
}
catch (Exception Err)
{
textBox1.Text = "Error READY!!!!";
MessageBox.Show(Err.Message);
}
//---------------
try
{
textBox2.Text = dataGridView2.CurrentRow.Cells[0].Value.ToString();
}
catch (Exception Err)
{
textBox2.Text = "Error READY!!!!";
MessageBox.Show(Err.Message);
}
//---------------
try
{
textBox3.Text = dataGridView2.CurrentRow.Cells[1].Value.ToString();
}
catch (Exception Err)
{
textBox3.Text = dataGridView1.CurrentRow.Cells[0].Value.ToString(); //"Error READY!!!!" - было, изменил на автовставку из 1 таблицы;
MessageBox.Show(Err.Message);
}
//---------------
}
//---------------------------------------------------------------------
}
} |
|