Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Базы данных под .NET > Попытка чтения или записи в защищенную память


Автор: v_enom 14.2.2009, 17:21
очень мучаюсь.
постоянно при попытке чтения появляется такая ошибка:


AccessViolationException:
Попытка чтения или записи в защищенную память. Это часто свидетельствует о том, что другая память повреждена.


 Нужно получить данные из MySQL. Использую MySQL connector 5.1 net.
 код тестовый и простой.
таблица в БД тоже простая:  

 id | name | city
--------------------
1   |  aaaa | sev
23 | gedf   | msk



Код

  string MyConString =
                   "DRIVER={MySQL ODBC 5.1 Driver};" + // меня не надо, это драйвер  ODBC
                   "SERVER=localhost;" +
                   "PORT=3306;" +
                   "DATABASE=order_tour;" +
                   "UID=root;" +
                   "PASSWORD=;";
            OdbcConnection MyConnection = new OdbcConnection(MyConString);


            string SQLCommand = "select * from test";
            OdbcDataAdapter da = new OdbcDataAdapter(SQLCommand,MyConnection);
            DataSet ds = new DataSet();

            MyConnection.Open(); 
            da.Fill(ds);               // вот тут ошибка вылетает


тоже самое если использовать reader:

Код

 reader = command.ExecuteReader();                     
            object requsetArray;
            while (reader.Read())
            { 
                // или так: string res;  res = reader.GetString(1);
                requsetArray = reader["id"];   // а если поставить   например reader["name"] то выскакивает эта  ошибка.... а если  reader["id"], то   requsetArray==1

            }
            reader.Close();

помгите, потому что везде в уроках все проходит гладко, а у меня криво. Поиск тоже не помог ((((( даже гугл.

Автор: v_enom 15.2.2009, 14:47
up!
неужели ни кто не сталкивался с такой траблой???\

может тогда у кого-то есть ссылка на статью как работать с Mysql из под C# или С++ ?????

Автор: v_enom 15.2.2009, 19:05
решил проблему сам!!  smile 
оказывается проблема была в том, что не подключена библиотеке mysql.data.dll была. Естесвенно нельзя было написать что-то типо MySqlDataAdapter.... А т.к. коннектор .Net стоял, а не odbc, то вылезала ошибка. 
как только поставил  ODBC коннектор - все заработало, а после, подключив библиотеку, запустил и .Net  connector

причина была в том, что где-то в инете на сайте нашел пример якобы подключения к мускулу через Net connector ... но с помощью библиотеки System.data.Odbc. Прочитанное на сайте оказалось бредом на практике, что и ввело меня в заблуждение.

теперь как надо:
1. поставить VStudio, базу данных.
2. поставить коннектор ODBC или Mysql Connector Net

    2.a) ODBC. 
        прописываем using System.Data.Odbc
        и все работает. 
        файл коннектора: mysql-connector-odbc-5.1.5-win32.msi
        http://dev.mysql.com/doc/refman/5.1/en/connector-odbc.html

    2.б) Mysql
        добавляем файл using MySql.Data.dll в приложение: SolutionExpl->ConsoleApplication1(name)->add Refference->MySQl.Data.dll
        Подключаем пространсвто имен using MySql.Data.MySqlClient;
        запускаем и все работает.

        файл коннектора: mysql-connector-NET-5.2.5-win32.msi
        http://dev.mysql.com/doc/refman/5.1/en/connector-net.html


вот пример вывода для стандартной БД:

Код


static void ConnectToMySQL()
        {

            string source =
                  // "DRIVER={MySQL ODBC 5.2 Driver};" + // это драйвер  ODBC. для  Connector Net  не надо.
                   "SERVER=localhost;" +
                   "PORT=3306;" +
                   "DATABASE=mysql;" +
                   "UID=root;" +
                   "PASSWORD=;";

            string commandString = "SELECT * FROM user;";

            MySqlDataAdapter da = new MySqlDataAdapter(commandString, source);
            DataSet ds = new DataSet();
            da.Fill(ds, "user");
            DataTable dt = ds.Tables[0];
            Console.WriteLine("Coonection to MySQL SERVER. DataBase = mysql, Table Name = user\n\n");
            
            Console.WriteLine("-------------------------------");
            foreach (DataRow row in dt.Rows)
            {
                    Console.WriteLine("{0} \t {1} \t {2} \t", row[0], row[1], row[2]);
            }
        }

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)