07.05.2012, 13:56. Показов 2070. Ответов 1
здравствуйте, столкнулся с такой проблемой, на одной форме есть такой вот код:
| 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
| 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 System.Data.OleDb;
using System.IO;
using System.Diagnostics;
namespace Калькулятор_v._3
{
public partial class kim_create : Form
{
public kim_create()
{
InitializeComponent();
}
private void button_back_Click(object sender, EventArgs e)
{
kim_menu form_kim_menu = new kim_menu();
this.Hide();
this.Close();
form_kim_menu.ShowDialog();
}
private void kim_create_Load(object sender, EventArgs e)
{
numericUpDown_kol_vo_variantov_kim.Maximum = 200;
numericUpDown_kol_vo_variantov_kim.Minimum = 1;
numericUpDown_kol_vo_variantov_kim.Value = 1;
comboBox_db_pattern_kim.Items.Add("Не выбрано");
comboBox_db_pattern_kim.SelectedIndex = 0;
string connect = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=Calculator_db.accdb";
OleDbConnection con = new OleDbConnection(connect);
string zapr = "SELECT Имя_кр FROM [Шаблоны_кр]";
OleDbCommand request = new OleDbCommand(zapr, con);
con.Open();
OleDbDataReader reader = request.ExecuteReader();
while (reader.Read())
{
comboBox_db_pattern_kim.Items.Add(reader.GetString(0));
}
con.Close();
}
private void comboBox_db_pattern_kim_SelectedIndexChanged(object sender, EventArgs e)
{
string connect = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=Calculator_db.accdb";
OleDbConnection con = new OleDbConnection(connect);
string zapr = "SELECT [Шаблон_кр] FROM [Шаблоны_кр] WHERE [Имя_кр] = '" + comboBox_db_pattern_kim.SelectedItem.ToString() + "'";
OleDbCommand request = new OleDbCommand(zapr, con);
con.Open();
OleDbDataReader reader = request.ExecuteReader();
if (reader.Read())
{
textBox_pattern_kim.Text = reader.GetString(0).ToString();
}
con.Close();
}
private void button_create_kim_Click(object sender, EventArgs e)
{
int key_metka = 0;
System.Diagnostics.Process proc = new System.Diagnostics.Process();
proc.StartInfo.FileName = System.Windows.Forms.Application.StartupPath.ToString() + "\\data_vich\\vich.exe";
proc.StartInfo.WorkingDirectory = System.Windows.Forms.Application.StartupPath.ToString() + "\\data_vich\\";
if ((textBox_name_kim.Text == "") ||
(textBox_pattern_kim.Text == "") ||
(numericUpDown_kol_vo_variantov_kim.Text == ""))
{
MessageBox.Show("Не все поля заполнены. Проверьте правильность ввода.");
}
else
{
string connect = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=Calculator_db.accdb";
OleDbConnection con = new OleDbConnection(connect);
con.Open();
string[] pattern_kim = textBox_pattern_kim.Text.Split(new char[] { '\r', '\n', ' ' }, StringSplitOptions.RemoveEmptyEntries);
for (int i = 1; i <= numericUpDown_kol_vo_variantov_kim.Value ; i++ )
{
string zadania = "";
string zadania2 = "";
zadania += "Контрольная работа: " + textBox_name_kim.Text.ToString() + "\r\n" + "Вариант: " + i.ToString() + "\r\n";
zadania2 += "Контрольная работа: " + textBox_name_kim.Text.ToString() + "\r\n" + "Вариант: " + i.ToString() + "\r\n";
for (int j = 0; j < pattern_kim.Length ; j +=2)
{
string zapros_patternt_zad = "SELECT * FROM Шаблоны_заданий WHERE Имя = '" + pattern_kim[j].ToString() + "'";
OleDbCommand request_kim = new OleDbCommand(zapros_patternt_zad, con);
OleDbDataReader reader = request_kim.ExecuteReader();
if (reader.Read())
{
key_metka = 1;
StreamWriter fin = new StreamWriter("input.txt", false);
string zapis = pattern_kim[j + 1].ToString() + " " + reader.GetInt32(2).ToString() + " " + reader.GetInt32(3).ToString() + " " + reader.GetInt32(4).ToString() + " " + reader.GetInt32(5).ToString() + " " + reader.GetInt32(6).ToString() + " " + reader.GetInt32(8).ToString();
fin.WriteLine(zapis);
fin.Close();
proc.Start();
proc.WaitForExit();
StreamReader streamReader = new StreamReader(System.Windows.Forms.Application.StartupPath.ToString() + "\\data_vich\\output.txt");
string str = "";
while (!streamReader.EndOfStream)
{
str += streamReader.ReadToEnd();
}
zadania = zadania + str;
streamReader.Close();
StreamReader streamReader2 = new StreamReader(System.Windows.Forms.Application.StartupPath.ToString() + "\\data_vich\\output_z.txt");
string str2 = "";
while (!streamReader2.EndOfStream)
{
str2 += streamReader2.ReadToEnd();
}
zadania2 = zadania2 + str2;
streamReader2.Close();
}
else
{
MessageBox.Show("Один из веденных шаблонов заданий отсутствует в базе, проверьте правильность написания");
key_metka = 0;
return;
}
}
if (key_metka == 1)
{
string zapr2 = "INSERT INTO [База_кр] ([Name_kr], [Var_kr], [Zadania], [Zadania_z]) VALUES ('" + textBox_name_kim.Text + "', '" + i.ToString() + "', '" + zadania + "', '" + zadania2 + "')";
OleDbCommand request2 = new OleDbCommand(zapr2, con);
request2.ExecuteNonQuery();
}
}
string zapr_pattern = "INSERT INTO [Шаблоны_кр] ([Имя_кр], [Кол_во_вариантов], [Шаблон_кр]) VALUES ('" + textBox_name_kim.Text.ToString() + "', '" + numericUpDown_kol_vo_variantov_kim.Text.ToString() + "', '" + textBox_pattern_kim.Text.ToString() + "')";
OleDbCommand request_pattern = new OleDbCommand(zapr_pattern, con);
request_pattern.ExecuteNonQuery();
con.Close();
proc.Close();
con.Dispose();
proc.Dispose();
MessageBox.Show("Ким сгенерирован успешно.");
}
}
}
} |
|
в кнопке button_create_kim присутствует запуск внешнего приложения, причем запуск многократный, проблема заключается в том, что именно после выполнения алгоритма кнопки button_create_kim, мы выходим на предыдущую форму(меню), код меню:
| 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
| using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace Калькулятор_v._3
{
public partial class kim_menu : Form
{
public kim_menu()
{
InitializeComponent();
}
private void button_back_Click(object sender, EventArgs e)
{
main_menu form_main_menu = new main_menu();
this.Hide();
this.Close();
form_main_menu.ShowDialog();
}
private void button_create_kim_Click(object sender, EventArgs e)
{
kim_create form_kim_create = new kim_create();
this.Hide();
this.Close();
form_kim_create.ShowDialog();
}
private void button_view_kim_Click(object sender, EventArgs e)
{
kim_view form_kim_view = new kim_view();
this.Hide();
this.Close();
form_kim_view.ShowDialog();
}
private void button_save_kim_file_Click(object sender, EventArgs e)
{
kim_save_in_file form_kim_save_in_file = new kim_save_in_file();
this.Hide();
this.Close();
form_kim_save_in_file.ShowDialog();
}
private void button_delete_kim_Click(object sender, EventArgs e)
{
kim_delete form_kim_delete = new kim_delete();
this.Hide();
this.Close();
form_kim_delete.ShowDialog();
}
}
} |
|
и заходим в другую любую форму, в которой присутствует подключение к БД, при попытке открыть другую форму выпадае ошибка "попытка чтения или записи в защищенную память..." и ссылается она на ShowDialog() той формы, которую пытаюсь открыть. к примеру я попытаюсь открыть форму form_kim_view и она сразу же выдаст приведенную ошибку, ссылаясь на form_kim_view.ShowDialog()
вот код формы form_kim_view:
| 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
| 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 System.Data.OleDb;
using System.IO;
namespace Калькулятор_v._3
{
public partial class kim_view : Form
{
public kim_view()
{
InitializeComponent();
}
private void button_back_Click(object sender, EventArgs e)
{
kim_menu form_kim_menu = new kim_menu();
this.Hide();
form_kim_menu.ShowDialog();
this.Close();
}
private void kim_view_Load(object sender, EventArgs e)
{
comboBox_name_kim.Items.Add("Не выбрано");
comboBox_variant_kim.Items.Add("Не выбрано");
comboBox_name_kim.SelectedIndex = 0;
comboBox_variant_kim.SelectedIndex = 0;
string connect_t = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=Calculator_db.accdb";
OleDbConnection con_t = new OleDbConnection(connect_t);
con_t.Open();
string zapros_spisok = "SELECT DISTINCT Name_kr FROM [База_кр]";
OleDbCommand request_t = new OleDbCommand(zapros_spisok, con_t);
OleDbDataReader reader_t = request_t.ExecuteReader();
while (reader_t.Read())
{
comboBox_name_kim.Items.Add(reader_t.GetString(0));
}
con_t.Close();
}
private void comboBox_name_kim_SelectedIndexChanged(object sender, EventArgs e)
{
if (comboBox_name_kim.SelectedIndex != 0)
{
comboBox_variant_kim.Items.Clear();
comboBox_variant_kim.Items.Add("Не выбрано");
string connect = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=Calculator_db.accdb";
OleDbConnection con = new OleDbConnection(connect);
string zapr = "SELECT Var_kr FROM [База_кр] WHERE Name_kr = '" + comboBox_name_kim.SelectedItem.ToString() + "'";
OleDbCommand request = new OleDbCommand(zapr, con);
con.Open();
OleDbDataReader reader = request.ExecuteReader();
while (reader.Read())
{
comboBox_variant_kim.Items.Add(reader.GetInt32(0).ToString());
}
con.Close();
comboBox_variant_kim.SelectedIndex = 0;
}
}
private void comboBox_variant_kim_SelectedIndexChanged(object sender, EventArgs e)
{
if ((comboBox_name_kim.SelectedIndex != 0) &&
(comboBox_variant_kim.SelectedIndex != 0))
{
string connect = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=Calculator_db.accdb";
OleDbConnection con = new OleDbConnection(connect);
string zapr = "SELECT Zadania FROM [База_кр] WHERE Name_kr = '" + comboBox_name_kim.SelectedItem.ToString() + "' AND Var_kr = " + comboBox_variant_kim.SelectedItem.ToString();
OleDbCommand request = new OleDbCommand(zapr, con);
con.Open();
OleDbDataReader reader = request.ExecuteReader();
if (reader.Read())
{
textBox_text_kim.Text = reader.GetString(0).ToString();
}
con.Close();
}
}
}
} |
|
я считаю, что проблема заключается в работе с внешним приложением, так как при отсутствии proc (мы не запускаем внешнее приложение)в выполнении алгоритма кнопки button_create_kim, то все работает нормально, остальные формы открываются без проблем и без ошибок.
внешняя запускаемая программа написана на паскале, передача и прием параметров идет через текстовый файл, программа составляет задания по курсу "информатика" по заданным параметрам.
помогите пожалуйста разобраться в данной ситуации и избавиться от данной ошибки.
Добавлено через 4 часа 52 минуты
вообщем, протестив открытие приложения на отдельной форме и кнопке, понял, что дело не в запуске приложения, а в самом алгоритме кнопки...
Добавлено через 23 часа 17 минут
проблема решена...