Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.139.240.142] |
|
Сообщ.
#1
,
|
|
|
Уважаемое сообщество, подскажите, пожалуйста, в решении проблемки:rolleyes:
Столкнулся вот с чем: мне просто необходимо записать данные, полученные по сети. Для этого я написал простенькую либу (использую MySQL Connector Net 6.8.3): ... using (MySqlCommand cmd = mConnection.CreateCommand()) { cmd.CommandText = "insert into packets (Times, Timems, SystemCod, PacketType, DataPacket) values (@1,@2,@3,@4,@5)"; cmd.Parameters.AddWithValue("@1", time); cmd.Parameters.AddWithValue("@2", timems); cmd.Parameters.AddWithValue("@3", SysCod); cmd.Parameters.AddWithValue("@4", PacType); cmd.Parameters.AddWithValue("@5", data); cmd.ExecuteNonQuery(); } Соответственно код просто вызывает метод из этой либы и записывает данные в БД.... Так вот у меня есть два варианта: 1 - это группа приложений, которые обрабатывают свой тип данных; 2 - одно приложение с несколькими потоками. В первом случаи время записи в БД 30 пакетов (принял пакет - записал в БД, ... ) составляет около 160 мс. Во втором - около секунды:confused: С чем это может быть связано? Можно, конечно, предположить , что время уходит на создание и удаление объекта команд, но тогда почему такая разница между вариантами:confused: Я попытался сделать создание объекта команд глобальным, но тогда вылетает исключение: "параметр @1 уже определён": MySqlCommand cmd; ... try { mConnection.Open(); cmd = mConnection.CreateCommand() } ... cmd.CommandText = "insert into packets (Times, Timems, SystemCod, PacketType, DataPacket) values (@1,@2,@3,@4,@5)"; cmd.Parameters.AddWithValue("@1", time); cmd.Parameters.AddWithValue("@2", timems); cmd.Parameters.AddWithValue("@3", SysCod); cmd.Parameters.AddWithValue("@4", PacType); cmd.Parameters.AddWithValue("@5", data); cmd.ExecuteNonQuery(); Подскажите, пожалуйста, с чем это связано? Попытался использовать строку запроса вместо параметров: string sql = string.Format("insert into packets (Times, Timems, SystemCod, PacketType, DataPacket) values" + "('{0}','{1}','{2}','{3}','{4}')", time, timems, SysCod, PacType, answerPaket); выдаёт исключение: "Данные слишком длинные для колонки", хотя размерности совпадают |
Сообщ.
#2
,
|
|
|
а конекшн глобальный?
|
Сообщ.
#3
,
|
|
|
Цитата SPM @ Нет, я в каждом потоке создаю отдельное соединение. |
Сообщ.
#4
,
|
|
|
Цитата SPM @ Подскажите, пожалуйста, с чем это связано? cmd.Parameters["@1"].Value = time; |
Сообщ.
#5
,
|
|
|
Relaxander, спасибо, учёл
|
Сообщ.
#6
,
|
|
|
Подскажите, пожалуйста, а есть ли возможность в MYSQL записать блок данных в таблицу: сначала формирую таблицу , аналог таблицы БД, заполняю её, а потом одной командой записываю в БД?
Что то похожее на MySqlBulkLoader? |
Сообщ.
#8
,
|
|
|
Relaxander, спасибо за подсказку.
|