Задавайте вопросы, мы ответим
Вы не зашли.
Всем доброго времени суток!
Если тема не соответствует профилю форума, модераторы, удалите.
Суть проблемы в следующем. Пишу на С# прогу, которая в том числе работает с MySQL. Для работы необходимы апишные функции из libmysql.dll. Загружаю их из этой dll, в рантайме возникают исключения. На mysql_isert_id() исключение "Attempted to read or write protected memory. This is often an indication that other memory is corrupt.", на разные функции разные исключения))). Если есть у кого опыт подключения и использования апишных функций, поделитесь пожалуйста.
Неактивен
Почему не использовать Connector/NET? http://dev.mysql.com/downloads/connector/net/5.1.html
Неактивен
Я использую коннектор, но для некоторых запросов удобно использовать функции MySQL C API
Неактивен
API C# полностью повторяет API C, я не вижу смысла использовать не родной для языка API.
Ошибка не в том, что C API плохой (его использует куча программ без проблем), ошибка в том,
что Вы его плохо подключаете, скорее всего
Неактивен
Наверное я плохо подключаю. Но дело в том, что я не нашел примеров использования С API в С#. Если Вы меня научите, буду благодарен.
Неактивен
Боюсь, что вы вряд ли найдете человека, который когда-либо это делал. Расскажите, пожалуйста,
какую задачу Вы пытаетесь выполнить, для которой Вам не хватает функциональности коннектора C#?
Неактивен
Не то что бы мне не хватает его функциональности, скорее проблемы с отладкой. Например, то же, что делает mysql_insert_id() пытался заменить на коннектор+LAST_INSERT_ID(), вот суть кода:
--------------------------------------------------------
OdbcConnection connection = new OdbcConnection(connectionString);//connectionString - правильный
connection.Open();
OdbcCommand command;
command = new OdbcCommand(queryString, connection);//queryString="INSERT..." - работает корректно
command.ExecuteNonQuery();
command = new OdbcCommand("SELECT LAST_INSERT_ID();", connection);
int i=command.ExecuteNonQuery();
OdbcDataReader reader = command.ExecuteReader();
tbIndex.Text = Convert.ToString(reader.GetInt32(0));/*здесь происходит ошибка "No data exists for the row/column"*/
connection.Close();
reader.Close();
-------------------------------------------------------
Я так понимаю LAST_INSERT_ID() должен вернуть целое значение, но его не получается отловить(((
Неактивен
Хым. Насколько я вижу из этого куска кода, Вы не используете коннектор вообще - только ODBC.
Полистайте документацию по коннектору - Вы будете сильно удивлены возможностям C#
http://dev.mysql.com/doc/refman/5.1/en/ … mples.html
Неактивен
Разъясните пожалуйста в чем заключается использование коннектора, т.к. полистав экзамплы по Вашей ссылке я не нашел в них принципиального различия по сравнению с моим подходом. Суть все равно остается та же - составление запросов с использованием команд MySQL. А это не решает моих проблем, например у апишной функции mysql_escape_string аналогов я не нашел.
Неактивен
Насколько я знаю, mysql_escape_string вообще не нужен при использовании современных
интерфейсов к БД. Посмотрите, например, http://dev.mysql.com/doc/refman/5.0/en/ … nd-prepare
Неактивен
А где взять классы MySqlCommand, MySqlCommandBuilder и др? Что-то никак не найду соответствующей сборки/пространства...
Неактивен
Да, спасибо, я пользуюсь именно этим коннектором. Но VC2005 не видит нэймспэйса MySql....
Неактивен
Подозреваю, что его нужно подключить. Насколько я помню, это делается как-то через
менюшку... подробнее не помню, и под рукой нету приложения.
Неактивен
Действительно, нужно было подключить его dll через Add Referenses. Вы мне очень помогли. Премного благодарен.
Неактивен