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

Две формы для базы данных

21.11.2011, 06:43. Просмотров 1896. Ответов 9
Метки нет (Все метки)

Добрый день создаю базу на движке Fierberd.
Использую следующий код для подключения
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 //формируем connection string для последующего соединения с нашей базой данных
            FbConnectionStringBuilder fb_con = new FbConnectionStringBuilder();
            fb_con.Charset = "WIN1251"; //используемая кодировка
            fb_con.UserID = tbLogin.Text; //логин
            fb_con.Password = tbPwd.Text; //пароль
            fb_con.Database = tbPathToDB.Text; //путь к файлу базы данных
            fb_con.ServerType = 0; //указываем тип сервера (0 - "полноценный Firebird" (classic или super server), 1 - встроенный (embedded))
 
 
            //создаем подключение
            fb = new FbConnection(fb_con.ToString()); //передаем нашу строку подключения объекту класса FbConnection
 
 
            fb.Open(); //открываем БД
 
 
            FbDatabaseInfo fb_inf = new FbDatabaseInfo(fb); //информация о БД
 
 
            //пока у объекта БД не был вызван метод Open() - никакой информации о БД не получить, будет только ошибка
            //MessageBox.Show("Info: " + fb_inf.ServerClass + "; " + fb_inf.ServerVersion); //выводим тип и версию используемого сервера Firebird
            label1.Text = "Info: " + fb_inf.ServerClass + "; " + fb_inf.ServerVersion;
создаю вторую форму на ней пытаюсь выполнить следующий код
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
private void btnInsert_Click(object sender, EventArgs e)
        {
//выполним запрос на вставку
 
 
            FbCommand InsertSQL = new FbCommand("INSERT INTO C_CLIENTS(ID) VALUES(6)", fb);
 
 
if (fb.State == ConnectionState.Closed) //если соединение закрыто - откроем его; Перечисление ConnectionState содержит состояния соединения (подключено/отключено)
fb.Open();
 
 
FbTransaction fbt = fb.BeginTransaction(); //стартуем транзакцию; стартовать транзакцию можно только для открытой базы (т.е. мутод Open() уже был вызван ранее, иначе ошибка)
 
 
InsertSQL.Transaction = fbt; //необходимо проинициализить транзакцию для объекта InsertSQL
 
 
try
{
int res = InsertSQL.ExecuteNonQuery(); //для запросов, не возвращающих набор данных (insert, update, delete) надо вызывать этот метод
MessageBox.Show("SUCCESS: " + res.ToString());
fbt.Commit(); //если вставка прошла успешно - комитим транзакцию
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
 
 
InsertSQL.Dispose(); //в документации написано, что ОЧЕНЬ рекомендуется убивать объекты этого типа, если они больше не нужны
fb.Close();
}
выдает ошибку "Ошибка 1 Не удалось найти имя типа или пространства имен "FbCommand" (пропущена директива using или ссылка на сборку?) C:\Users\admin\documents\visual studio 2010\Projects\WindowsFormsApplication1\WindowsFormsApplication1\Form2.cs 25 13 WindowsFormsApplication1
"
каким образом связать две формы чтоб все работало?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.11.2011, 06:43
Ответы с готовыми решениями:

RadioButtonList и две базы данных Acces & SQL
добрый день, подскажите пожалуйста алгоритм выполнения задачки. даны две базы данных пациентов...

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

Привязка данных из базы к полям формы
По условию задания необходимо создать базу данных данными о пользователе: логин, пароль, имя...

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

Какой тип базы данных лучше выбрать для небольшого количества данных
Здравствуйте. На работе есть программа на FoxPro 2.6 написана, имеет 12 баз данных (dbase, *.dbf)...

9
_ZnOFF_
16 / 16 / 6
Регистрация: 27.06.2010
Сообщений: 48
21.11.2011, 09:21 2
Поскольку вы показали только часть кода, могу сделать предположение: у вас чего - то не хватает в using (В самом начале листинга формы подключаются библиотеки).
Скопируйте все
C#
1
using {имя библиотеки};
из первой формы во вторую.
0
cool999
0 / 0 / 0
Регистрация: 08.11.2011
Сообщений: 32
21.11.2011, 12:06  [ТС] 3
form1
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
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using FirebirdSql.Data.FirebirdClient;
 
namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        FbConnection fb;
        public Form1()
        {
            InitializeComponent();
        }
 
        private void btnExit_Click(object sender, EventArgs e)
        {
            Close();
        }
 
        private void btnConnect_Click(object sender, EventArgs e)
        {
            //формируем connection string для последующего соединения с нашей базой данных
            FbConnectionStringBuilder fb_con = new FbConnectionStringBuilder();
            fb_con.Charset = "WIN1251"; //используемая кодировка
            fb_con.UserID = tbLogin.Text; //логин
            fb_con.Password = tbPwd.Text; //пароль
            fb_con.Database = tbPathToDB.Text; //путь к файлу базы данных
            fb_con.ServerType = 0; //указываем тип сервера (0 - "полноценный Firebird" (classic или super server), 1 - встроенный (embedded))
 
 
            //создаем подключение
            fb = new FbConnection(fb_con.ToString()); //передаем нашу строку подключения объекту класса FbConnection
 
 
            fb.Open(); //открываем БД
 
 
            FbDatabaseInfo fb_inf = new FbDatabaseInfo(fb); //информация о БД
 
 
            //пока у объекта БД не был вызван метод Open() - никакой информации о БД не получить, будет только ошибка
            //MessageBox.Show("Info: " + fb_inf.ServerClass + "; " + fb_inf.ServerVersion); //выводим тип и версию используемого сервера Firebird
            label1.Text = "Info: " + fb_inf.ServerClass + "; " + fb_inf.ServerVersion;
        }
 
        private void btnInsert_Click(object sender, EventArgs e)
        {
//выполним запрос на вставку
 
 
            FbCommand InsertSQL = new FbCommand("INSERT INTO C_CLIENTS(ID) VALUES(6)", fb);
 
 
if (fb.State == ConnectionState.Closed) //если соединение закрыто - откроем его; Перечисление ConnectionState содержит состояния соединения (подключено/отключено)
fb.Open();
 
 
FbTransaction fbt = fb.BeginTransaction(); //стартуем транзакцию; стартовать транзакцию можно только для открытой базы (т.е. мутод Open() уже был вызван ранее, иначе ошибка)
 
 
InsertSQL.Transaction = fbt; //необходимо проинициализить транзакцию для объекта InsertSQL
 
 
try
{
int res = InsertSQL.ExecuteNonQuery(); //для запросов, не возвращающих набор данных (insert, update, delete) надо вызывать этот метод
MessageBox.Show("SUCCESS: " + res.ToString());
fbt.Commit(); //если вставка прошла успешно - комитим транзакцию
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
 
 
InsertSQL.Dispose(); //в документации написано, что ОЧЕНЬ рекомендуется убивать объекты этого типа, если они больше не нужны
fb.Close();
}
 
        private void btnSelect_Click(object sender, EventArgs e)
        {
            //так проверять состояние соединения (активно или не активно)
            if (fb.State == ConnectionState.Closed)
                fb.Open();
 
 
            FbTransaction fbt = fb.BeginTransaction(); //стартуем транзакцию; стартовать транзакцию можно только для открытой базы (т.е. мутод Open() уже был вызван ранее, иначе ошибка)
 
 
            FbCommand SelectSQL = new FbCommand("SELECT * FROM C_CLIENTS", fb); //задаем запрос на выборку
 
 
            SelectSQL.Transaction = fbt; //необходимо проинициализить транзакцию для объекта SelectSQL
            FbDataReader reader = SelectSQL.ExecuteReader(); //для запросов, которые возвращают результат в виде набора данных надо использоваться метод ExecuteReader()
 
 
           // string select_result = ""; //в эту переменную будем складывать результат запроса Select
 
            
           
 
            try
            {
                while (reader.Read()) //пока не прочли все данные выполняем...
                {
                  //  select_result = select_result + reader.GetInt32(0).ToString() + ", " + reader.GetString(1) + "\n";
                    DataGridViewCell firstCell =
                     new DataGridViewTextBoxCell();
                    DataGridViewCell secondCell =
                        new DataGridViewTextBoxCell();
                    DataGridViewCell thirdCell =
                        new DataGridViewCheckBoxCell();
                    DataGridViewRow row = new DataGridViewRow();
                    firstCell.Value = reader.GetString(3);
                    secondCell.Value = reader.GetString(4);
                    thirdCell.Value = true;
                    row.Cells.AddRange(firstCell, secondCell, thirdCell);
                    this.myDataGridView.Rows.Add(row);  
                    
                }
            }
            finally
            {
                //всегда необходимо вызывать метод Close(), когда чтение данных завершено
                reader.Close();
                fb.Close(); //закрываем соединение, т.к. оно нам больше не нужно
            }
            //MessageBox.Show(select_result); //выводим результат запроса
            SelectSQL.Dispose(); //в документации написано, что ОЧЕНЬ рекомендуется убивать объекты этого типа, если они больше не нужны
 
         
 
 
        }
 
        private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
 
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
            //создание столбцов  
            DataGridViewTextBoxColumn firstColumn =
                new DataGridViewTextBoxColumn();
            firstColumn.HeaderText = "ID";
            firstColumn.Name = "ID";
            DataGridViewTextBoxColumn secondColumn =
                new DataGridViewTextBoxColumn();
            secondColumn.HeaderText = "Name";
            secondColumn.Name = "Name";
            DataGridViewCheckBoxColumn thirdColumn =
                new DataGridViewCheckBoxColumn();
            thirdColumn.Name = "IsFree";
            thirdColumn.HeaderText = "IsFree";
            //создание столбцов  
 
 
            //добавление столбцов  
            myDataGridView.Columns.Add(firstColumn);
            myDataGridView.Columns.Add(secondColumn);
            myDataGridView.Columns.Add(thirdColumn);
            //добавление столбцов  
        }
 
        private void bindingSource1_CurrentChanged(object sender, EventArgs e)
        {
 
        }
 
        private void myDataGridView_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
 
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            Form2 secondForm = new Form2();
            secondForm.Show();
           
        }
    }
        }
form2
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
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using FirebirdSql.Data.FirebirdClient;
 
namespace WindowsFormsApplication1
{
    public partial class Form2 : Form
    {
        FbConnection fb;
        public Form2()
        {
            
            InitializeComponent();
           
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            //выполним запрос на вставку
 
 
            FbCommand InsertSQL = new FbCommand("INSERT INTO BOOKS(ID, CAPTION) VALUES(6, 'Полное собрание сочинений Дарьи Донцовой')", fb);
 
 
            if (fb.State == ConnectionState.Closed) //если соединение закрыто - откроем его; Перечисление ConnectionState содержит состояния соединения (подключено/отключено)
                fb.Open();
 
 
            FbTransaction fbt = fb.BeginTransaction(); //стартуем транзакцию; стартовать транзакцию можно только для открытой базы (т.е. мутод Open() уже был вызван ранее, иначе ошибка)
 
 
            InsertSQL.Transaction = fbt; //необходимо проинициализить транзакцию для объекта InsertSQL
 
 
            try
            {
                int res = InsertSQL.ExecuteNonQuery(); //для запросов, не возвращающих набор данных (insert, update, delete) надо вызывать этот метод
                MessageBox.Show("SUCCESS: " + res.ToString());
                fbt.Commit(); //если вставка прошла успешно - комитим транзакцию
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
 
 
            InsertSQL.Dispose(); //в документации написано, что ОЧЕНЬ рекомендуется убивать объекты этого типа, если они больше не нужны
            fb.Close();
        }
    }
}
переделал все запускается но при попытке выполнить запрос со второй формы ругается на
C#
1
 if (fb.State == ConnectionState.Closed)
Две формы для базы данных
0
kolorotur
Эксперт .NET
11117 / 9063 / 2285
Регистрация: 17.09.2011
Сообщений: 15,606
Завершенные тесты: 1
21.11.2011, 12:21 4
У вас переменная fb нигде не инициализируется.
0
cool999
0 / 0 / 0
Регистрация: 08.11.2011
Сообщений: 32
21.11.2011, 15:30  [ТС] 5
А это?
C#
1
FbConnection fb;
0
ITALIANEZ
56 / 55 / 17
Регистрация: 28.07.2009
Сообщений: 201
21.11.2011, 15:48 6
C#
1
FbConnection fb;
это она объявляется.

а вот это инициализируется
C#
1
fb = new FbConnection(...);
0
cool999
0 / 0 / 0
Регистрация: 08.11.2011
Сообщений: 32
21.11.2011, 16:38  [ТС] 7
так у меня же уже есть подключение к базе на первой форме?
зачем каждый раз подключатся?
0
ITALIANEZ
56 / 55 / 17
Регистрация: 28.07.2009
Сообщений: 201
21.11.2011, 17:08 8
то что происходит на той форме на второй "не видно". Почитайте про область видимости.

у вас fb - поле класса, причем закрытое для внешнего использования (private). то что в обоих классах оно называется одинакого - не значит, что это одна и та же переменная. для каждого из классов она своя.

если хотите вынесите в отдельный класс типа

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class MyConnect
{
public static FbConnection GetConnection(string login, string pswd, string path)
{
FbConnection fb;
 
FbConnectionStringBuilder fb_con = new FbConnectionStringBuilder();
fb_con.Charset = "WIN1251"; 
fb_con.UserID = login; 
fb_con.Password = pswd; 
fb_con.Database = path; 
fb_con.ServerType = 0; 
 
fb = new FbConnection(fb_con.ToString());
 
return fb;
}
}
и используйте потом везде

C#
1
MyConnect.GetConnection("login", "pswd", @"c:\mypath\")
0
cool999
0 / 0 / 0
Регистрация: 08.11.2011
Сообщений: 32
21.11.2011, 18:55  [ТС] 9
примерно понял спасибо

Добавлено через 34 минуты
Еще хотел спросить существует ли метод программным способом узнать сколько столбцов в таблице и их названия?

Добавлено через 37 минут
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
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using FirebirdSql.Data.FirebirdClient;
 
namespace WindowsFormsApplication1
{
   
    public partial class Form1 : Form
    {
        
        FbConnection fb;
        public Form1()
        {
            InitializeComponent();
        }
 
        class MyConnect
        {
            public static FbConnection GetConnection(string login, string pswd, string path)
            {
                FbConnection fb;
 
                FbConnectionStringBuilder fb_con = new FbConnectionStringBuilder();
                fb_con.Charset = "WIN1251";
                fb_con.UserID = login;
                fb_con.Password = pswd;
                fb_con.Database = path;
                fb_con.ServerType = 0;
 
                fb = new FbConnection(fb_con.ToString());
                return fb;
            }
        } 
        
        private void btnExit_Click(object sender, EventArgs e)
        {
            Close();
        }
 
        
        
        
        
        
        
        private void btnConnect_Click(object sender, EventArgs e)
        {
            //формируем connection string для последующего соединения с нашей базой данных
           /* FbConnectionStringBuilder fb_con = new FbConnectionStringBuilder();
            fb_con.Charset = "WIN1251"; //используемая кодировка
            fb_con.UserID = tbLogin.Text; //логин
            fb_con.Password = tbPwd.Text; //пароль
            fb_con.Database = tbPathToDB.Text; //путь к файлу базы данных
            fb_con.ServerType = 0; //указываем тип сервера (0 - "полноценный Firebird" (classic или super server), 1 - встроенный (embedded))
 
 
            //создаем подключение
            fb = new FbConnection(fb_con.ToString()); //передаем нашу строку подключения объекту класса FbConnection
 
 
            fb.Open(); //открываем БД
 
 
            FbDatabaseInfo fb_inf = new FbDatabaseInfo(fb); //информация о БД
 
 
            //пока у объекта БД не был вызван метод Open() - никакой информации о БД не получить, будет только ошибка
            //MessageBox.Show("Info: " + fb_inf.ServerClass + "; " + fb_inf.ServerVersion); //выводим тип и версию используемого сервера Firebird*/
 
 
            MyConnect.GetConnection(tbLogin.Text, tbPwd.Text, @"C:\Bases\Base.fdb"); 
           // label1.Text = "Info: " + fb_inf.ServerClass + "; " + fb_inf.ServerVersion;
        }
 
        private void btnInsert_Click(object sender, EventArgs e)
        {
//выполним запрос на вставку
 
 
            FbCommand InsertSQL = new FbCommand("INSERT INTO C_CLIENTS(ID,NAME) VALUES(6,6)", fb);
 
 
if (fb.State == ConnectionState.Closed) //если соединение закрыто - откроем его; Перечисление ConnectionState содержит состояния соединения (подключено/отключено)
fb.Open();
 
 
FbTransaction fbt = fb.BeginTransaction(); //стартуем транзакцию; стартовать транзакцию можно только для открытой базы (т.е. мутод Open() уже был вызван ранее, иначе ошибка)
 
 
InsertSQL.Transaction = fbt; //необходимо проинициализить транзакцию для объекта InsertSQL
 
 
try
{
int res = InsertSQL.ExecuteNonQuery(); //для запросов, не возвращающих набор данных (insert, update, delete) надо вызывать этот метод
MessageBox.Show("SUCCESS: " + res.ToString());
fbt.Commit(); //если вставка прошла успешно - комитим транзакцию
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
 
 
InsertSQL.Dispose(); //в документации написано, что ОЧЕНЬ рекомендуется убивать объекты этого типа, если они больше не нужны
fb.Close();
}
 
        private void btnSelect_Click(object sender, EventArgs e)
        {
            //так проверять состояние соединения (активно или не активно)
            myDataGridView.Rows.Clear();
            if (fb.State == ConnectionState.Closed)
                fb.Open();
 
 
            FbTransaction fbt = fb.BeginTransaction(); //стартуем транзакцию; стартовать транзакцию можно только для открытой базы (т.е. мутод Open() уже был вызван ранее, иначе ошибка)
 
 
            FbCommand SelectSQL = new FbCommand("SELECT * FROM C_CLIENTS", fb); //задаем запрос на выборку
 
 
            SelectSQL.Transaction = fbt; //необходимо проинициализить транзакцию для объекта SelectSQL
            FbDataReader reader = SelectSQL.ExecuteReader(); //для запросов, которые возвращают результат в виде набора данных надо использоваться метод ExecuteReader()
 
 
           // string select_result = ""; //в эту переменную будем складывать результат запроса Select
 
            
           
 
            try
            {
                while (reader.Read()) //пока не прочли все данные выполняем...
                {
                  //  select_result = select_result + reader.GetInt32(0).ToString() + ", " + reader.GetString(1) + "\n";
                    DataGridViewCell firstCell =
                     new DataGridViewTextBoxCell();
                    DataGridViewCell secondCell =
                        new DataGridViewTextBoxCell();
                    DataGridViewCell thirdCell =
                        new DataGridViewCheckBoxCell();
                    DataGridViewRow row = new DataGridViewRow();
                    firstCell.Value = reader.GetString(0);
                    secondCell.Value = reader.GetString(1);
                    thirdCell.Value = true;
                    row.Cells.AddRange(firstCell, secondCell, thirdCell);
                    this.myDataGridView.Rows.Add(row);  
                    
                }
            }
            finally
            {
                //всегда необходимо вызывать метод Close(), когда чтение данных завершено
                reader.Close();
                fb.Close(); //закрываем соединение, т.к. оно нам больше не нужно
            }
            //MessageBox.Show(select_result); //выводим результат запроса
            SelectSQL.Dispose(); //в документации написано, что ОЧЕНЬ рекомендуется убивать объекты этого типа, если они больше не нужны
 
         
 
 
        }
 
        private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
 
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
            //создание столбцов  
            DataGridViewTextBoxColumn firstColumn =
                new DataGridViewTextBoxColumn();
            firstColumn.HeaderText = "ID";
            firstColumn.Name = "ID";
            DataGridViewTextBoxColumn secondColumn =
                new DataGridViewTextBoxColumn();
            secondColumn.HeaderText = "Name";
            secondColumn.Name = "Name";
            DataGridViewCheckBoxColumn thirdColumn =
                new DataGridViewCheckBoxColumn();
            thirdColumn.Name = "IsFree";
            thirdColumn.HeaderText = "IsFree";
            //создание столбцов  
 
 
            //добавление столбцов  
            myDataGridView.Columns.Add(firstColumn);
            myDataGridView.Columns.Add(secondColumn);
            myDataGridView.Columns.Add(thirdColumn);
            //добавление столбцов  
        }
 
        private void bindingSource1_CurrentChanged(object sender, EventArgs e)
        {
 
        }
 
        private void myDataGridView_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
 
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            Form2 secondForm = new Form2();
            secondForm.Show();
           
        }
 
        private void tbPathToDB_TextChanged(object sender, EventArgs e)
        {
 
        }
 
        private void btnDelete_Click(object sender, EventArgs e)
        {
 
 
            int p = Convert.ToInt32(this.myDataGridView.CurrentRow.Cells[0].Value);
 FbCommand InsertSQL = new FbCommand("DELETE FROM C_CLIENTS WHERE ID=" + p, fb);
 
 
if (fb.State == ConnectionState.Closed) //если соединение закрыто - откроем его; Перечисление ConnectionState содержит состояния соединения (подключено/отключено)
fb.Open();
 
 
FbTransaction fbt = fb.BeginTransaction(); //стартуем транзакцию; стартовать транзакцию можно только для открытой базы (т.е. мутод Open() уже был вызван ранее, иначе ошибка)
 
 
InsertSQL.Transaction = fbt; //необходимо проинициализить транзакцию для объекта InsertSQL
 
 
try
{
int res = InsertSQL.ExecuteNonQuery(); //для запросов, не возвращающих набор данных (insert, update, delete) надо вызывать этот метод
MessageBox.Show("SUCCESS: " + res.ToString());
fbt.Commit(); //если вставка прошла успешно - комитим транзакцию
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
 
 
InsertSQL.Dispose(); //в документации написано, что ОЧЕНЬ рекомендуется убивать объекты этого типа, если они больше не нужны
fb.Close();
}
           
}
 
 
 
}
Сделал как вы посоветовали подключается нормально только при выполнении запроса не видит подключения ругается на " if (fb.State == ConnectionState.Closed)
fb.Open();"
0
ITALIANEZ
56 / 55 / 17
Регистрация: 28.07.2009
Сообщений: 201
22.11.2011, 12:36 10
вы не поняли, что такое инициализация. вы на уровне класса объявили поле fb типа FbConnection, но нигде его не проинициализировали. предложенная функция MyConnect.GetConnection(...) всего лиш возвращает объект типа FbConnection и позволяет не писать каждый раз один и тот же код.

вам в вашем методе, да и везде где вам необходимо подключение инициализация объекта типа FbConnection, как бы он не назывался (fb, con, connect и тд) будет происходить примерно так

C#
1
FbConnection fb = MyConnect.GetConnection(tbLogin.Text, tbPwd.Text, @"C:\Bases\Base.fdb");
откройте любой любой учебник по C# там в самом начале должны касаться вопросов объявления и инициализации объектов. а так же про область видимости (ключевые слова public, ptivate). пардонте, но вы не совсем понимаете о чем вам пишут.))

Добавлено через 23 минуты
примерно основа должна быть такой
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
    public partial class Form1 : Form
    {
        FbConnection fb;
        public Form1()
        {
            InitializeComponent();
        }
 
        private void btnConnect_Click(object sender, EventArgs e)
        {
             fb = MyConnect.GetConnection(tbLogin.Text, tbPwd.Text, @"C:\Bases\Base.fdb");
        }
    }
 
    class MyConnect
    {
        public static FbConnection GetConnection(string login, string pswd, string path)
        {
            FbConnection con;
 
            FbConnectionStringBuilder fb_con = new FbConnectionStringBuilder();
            fb_con.Charset = "WIN1251";
            fb_con.UserID = login;
            fb_con.Password = pswd;
            fb_con.Database = path;
            fb_con.ServerType = 0;
 
            con = new FbConnection(fb_con.ToString());
            return con;
        }
    }
надеюсь дальше сможете, но почитать вам всеж надо. и почитать про ADO.Net, чтоб знать что подключение открывать надо не 1 раз))
0
22.11.2011, 12:36
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.11.2011, 12:36

Создание базы данных, открытие из под одной базы данных MS Access
Здравствуйте. В общем, C# начал заниматься только вот и сразу была поставлена задача создать базу...

Зачем необходимо создавать формы в Access при создании базы для c#
Добрый день, не совсем в курсе, зачем нужно создавать множество запросов и форм в БД для программы...

Скрипт для базы данных
Добрый день. Я пишу простое ASP.NET MVC приложение. Использую Visual Studio 2015 Community и SQL...


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

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

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