SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 22.12.2015 10:00:08

gai561
Участник
Зарегистрирован: 22.12.2015
Сообщений: 5

MySQL for Visual Studio

Использую MS Visual Studio 2013 (Professional edition), MySQL for Visual Studio 1.2.5 и MySQL 5.5.46 (Ubuntu).
Пришлось сделать перенос большого объема связанных между собой данных в MySQL и заметил одну принципиальную ошибку MySQL for Visual Studio (или я что-то недосмотрел): при заполнении (функция Fill соответствующего TableAdapter)  данных таблицы в VS из MySQL данные заполняются, а вот информация о AUTO_INCREMENT из MySQL в соответствующее поле AutoIncrementSeed колонки таблицы VS не переносится, что приводит к катастрофическим последствиям.
Подскажите, что я делаю не так и как мне получить информацию о AUTO_INCREMENT (имеется в виду следующее свободное значение поля) в VS.

Неактивен

 

#2 22.12.2015 16:14:31

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2419

Re: MySQL for Visual Studio

Посмотрите тут.

Следующее значение autoincrement http://sqlinfo.ru/forum/viewtopic.php?id=4217
Можно посмотреть одно из полей результата запрос

SHOW TABLE STATUS LIKE 'table_name'


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#3 22.12.2015 19:44:59

gai561
Участник
Зарегистрирован: 22.12.2015
Сообщений: 5

Re: MySQL for Visual Studio

Извините, но по английски "читаю и перевожу со словарем". Знал бы аглицкий, задал бы вопрос прямо на mysql.com. Предложный Вами вариант реализуем, но какой "огород городить" придется в Visual Studio да еще и для каждой таблицы. Хотелось бы услышать ответ от рускоязычных людей, близких к группе MySQL - почему это не реализует MySQL for Visual Studio (хотя может и реализует, а у меня кривые руки) - как по мне, так это его прямая функциональность.

Отредактированно gai561 (22.12.2015 20:47:27)

Неактивен

 

#4 22.12.2015 20:30:41

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2419

Re: MySQL for Visual Studio

Ок, давайте попробуем со словарем.

check in the dataset designer if your ID key column's property AutoIncrement property is set to true. If it's not, set it to true and rebuild your tableadapters...

Смысл такой, что

проверьте в свойствах датасета, стоит ли свойство AutoIncrement в true. Если нет, то поставьте в тру и инициализируйте снова Ваш адаптер.

Почему не реализует команда MySQL for Visual Studio - попробуйте их спросить )), если они Вам ответят - обязательно поделитесь с нами ;-).


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#5 22.12.2015 20:40:21

gai561
Участник
Зарегистрирован: 22.12.2015
Сообщений: 5

Re: MySQL for Visual Studio

Проблема в том,  что свойство AutoIncrement имеет значение true, вот только значение свойства AutoIncrementSeed не подтягивается из базы данных, а его нельзя знать заранее.

Неактивен

 

#6 22.12.2015 20:59:03

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2419

Re: MySQL for Visual Studio

AutoIncrementSeed не имеет отношения к MySQL, попробуйте правда что на форуме разработчиков Mysql For Visual Studio спросить.

Относительно получения следующего значения - посмотрите внимательно код ниже, сразу прояснится, как получить следующее значение (11).

А вообще - почему бы не перенести данные стандартными путями? mysqldump и последующий импорт? зачем городить этот огород из visual studio и так далее?

Код:

mysql> show create table tt;
+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table                                                                                                                                                            |
+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| tt    | CREATE TABLE `tt` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `val` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=11 DEFAULT CHARSET=latin1 |
+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

mysql> select * from tt;
+----+------+
| id | val  |
+----+------+
|  1 |  100 |
|  2 |   90 |
|  3 |   80 |
|  4 |   70 |
|  5 |   60 |
|  6 |   50 |
|  7 |   40 |
|  8 |   30 |
|  9 |   20 |
| 10 |   10 |
+----+------+
10 rows in set (0.00 sec)

mysql> SHOW TABLE STATUS LIKE 'tt'\G
*************************** 1. row ***************************
           Name: tt
         Engine: MyISAM
        Version: 10
     Row_format: Fixed
           Rows: 10
 Avg_row_length: 9
    Data_length: 90
Max_data_length: 2533274790395903
   Index_length: 2048
      Data_free: 0
 Auto_increment: 11
    Create_time: 2014-09-03 19:30:45
    Update_time: 2014-09-03 19:33:17
     Check_time: NULL
      Collation: latin1_swedish_ci
       Checksum: NULL
 Create_options:
        Comment:
1 row in set (0.00 sec)

Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#7 22.12.2015 21:39:48

gai561
Участник
Зарегистрирован: 22.12.2015
Сообщений: 5

Re: MySQL for Visual Studio

Да я же не против - предложенный Вами вариант реализуем. Согласен  с тем, что AutoIncrementSeed  из VS, но ведь есть его аналог в MySQL - Ваш вариант лишь подтверждает это. И вызывает удивление, что при заполнении DataTable в VS при помощи MySQL for Visual Studio не переносится это значение.
Добавлю - я, честно говоря, даже не предполагал, что свойство AutoIncrementSeed  в VS не заполняется при заполнении DataTable в VS при помощи MySQL for Visual Studio.

Отредактированно gai561 (22.12.2015 21:55:43)

Неактивен

 

#8 23.12.2015 16:14:57

gai561
Участник
Зарегистрирован: 22.12.2015
Сообщений: 5

Re: MySQL for Visual Studio

Публикую свое решение (на базе предложения deadka), оно универсально - бери себе и вставляй в свой проект:

static class Service
    {
        static public long Increment(string pConnectionString, string pNameTable)
        {
            System.Data.DataTable tableStatus = new System.Data.DataTable();
            tableStatus.TableName = "tableStatus";

            MySql.Data.MySqlClient.MySqlDataAdapter tableStatusTableAdapter =
                 new MySql.Data.MySqlClient.MySqlDataAdapter();

            MySql.Data.MySqlClient.MySqlCommand lComm = new MySql.Data.MySqlClient.MySqlCommand();
            lComm.CommandText = "SHOW TABLE STATUS LIKE '" + pNameTable + "'";
            MySql.Data.MySqlClient.MySqlConnection lConn = new MySql.Data.MySqlClient.MySqlConnection();
            lConn.ConnectionString = pConnectionString;
            lComm.Connection = lConn;
            tableStatusTableAdapter.SelectCommand = lComm;

            tableStatusTableAdapter.Fill(tableStatus);

            if (tableStatus.Rows.Count < 1) return 1;
            System.Data.DataRow lRow = tableStatus.Rows[0];
            if ((lRow[0].ToString() == pNameTable) && (lRow[10].ToString() != ""))
            {
                ulong AutoIncrementSeed = (ulong)lRow[10];
                return (long)AutoIncrementSeed;
            }
            return 1;
        }
    }

Для получения AUTO_INCREMENT для нужной таблицы использовать вызов типа:
myDataSet.tab1.idKeyColumn.AutoIncrementSeed = Service.Increment(Properties.Settings.Default.myConnectionString, "tab1");

Отредактированно gai561 (23.12.2015 16:17:09)

Неактивен

 

#9 25.12.2015 02:52:57

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2419

Re: MySQL for Visual Studio

Браво! Однако продолжу занудно давить на свое предложение - всерьез задуматься о переносе данных традиционными путями (mysqldump и иже). Что-то мне подсказывает, что попытка анализировать следующее значение из show table status рано или поздно больно выстрелит в ногу.


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson