2 место Заготовка для работы с БД MySQL в кубике C#

rol

Client
Регистрация
19.09.2017
Сообщения
44
Благодарностей
7
Баллы
8
Насколько мне известно, лочить можно только таблицу целиком. И дело не в коде автора. Это возможности мускула.
Если Не лочить всю таблицу то все летает хоть в 300 потоков а с локами больше 10 уже душит можно ли как то это оптимизировать в коде автора путем частичной блокировки строк ?
 

Deiccide

Client
Регистрация
01.03.2019
Сообщения
6
Благодарностей
0
Баллы
1
Кто-нибудь помогите решить проблему.

Что делает кубик: Получает данные из БД.
string db_host = project.Variables["db_host"].Value;
string db_user = project.Variables["db_user"].Value;
string db_pswd = project.Variables["db_pswd"].Value;
string db_database = project.Variables["db_name"].Value;
string db_charset = "utf8";

// коннект к MySQL и открытие сессии
DB db = new DB(db_host, db_user, db_pswd, db_database, db_charset);
db.query("LOCK TABLES art_lots WRITE");
List<string> row = db.getAll("SELECT deadline, date_publ, status FROM art");
db.query("UNLOCK TABLES");
db.close();

Что происходит: Без получения данных из столбцов с форматом Date, всё работает правильно.
В случае же когда я тяну данные с форматом Date, возникает ошибка.

Ошибка: Unable to convert MySQL date/time value to System.DateTime

Поискал в интернете и на форуме зенки, нашел только такое
Adding convert zero datetime=True to the connection string will automatically convert 0000-00-00 Date values to DateTime.MinValue().

Как я понял ошибка из-за данных "0000-00-00" и чтобы их тянуть нужно конвертировать их.
Когда в этих столбцах с датами было 'null', ошибок не было. После обновления строк, видимо подгрузились 0000-00-00 и пошли ошибки.

Не понимаю как конвертирование настроить и можно ли вообще с этой библиотекой.

Или может быть есть решение со сменой настроек в БД?
Или может конвертирование надо в самом sql запросе прописать?

Кто может быть сталкивался с такой проблемой?
 

Вложения

  • 117 КБ Просмотры: 150
  • 277,2 КБ Просмотры: 150

itcommander

Client
Регистрация
25.09.2019
Сообщения
31
Благодарностей
4
Баллы
8
Подскажите как определить кириллицу UTF8 при добавлении записей. Предложенный автором код сохраняет знаки вопросом.
Понимаю что нужно установить charset=utf8, но как это сделать?
Спасибо.
 

bizon_stas

Client
Регистрация
10.12.2017
Сообщения
5
Благодарностей
1
Баллы
3
Постом выше, как раз пример с установкой кодировки.
 

serg32

Client
Регистрация
27.02.2015
Сообщения
545
Благодарностей
15
Баллы
18
Кто-нибудь помогите решить проблему.

Что делает кубик: Получает данные из БД.
string db_host = project.Variables["db_host"].Value;
string db_user = project.Variables["db_user"].Value;
string db_pswd = project.Variables["db_pswd"].Value;
string db_database = project.Variables["db_name"].Value;
string db_charset = "utf8";

// коннект к MySQL и открытие сессии
DB db = new DB(db_host, db_user, db_pswd, db_database, db_charset);
db.query("LOCK TABLES art_lots WRITE");
List<string> row = db.getAll("SELECT deadline, date_publ, status FROM art");
db.query("UNLOCK TABLES");
db.close();

Что происходит: Без получения данных из столбцов с форматом Date, всё работает правильно.
В случае же когда я тяну данные с форматом Date, возникает ошибка.

Ошибка: Unable to convert MySQL date/time value to System.DateTime

Поискал в интернете и на форуме зенки, нашел только такое
Adding convert zero datetime=True to the connection string will automatically convert 0000-00-00 Date values to DateTime.MinValue().

Как я понял ошибка из-за данных "0000-00-00" и чтобы их тянуть нужно конвертировать их.
Когда в этих столбцах с датами было 'null', ошибок не было. После обновления строк, видимо подгрузились 0000-00-00 и пошли ошибки.

Не понимаю как конвертирование настроить и можно ли вообще с этой библиотекой.

Или может быть есть решение со сменой настроек в БД?
Или может конвертирование надо в самом sql запросе прописать?

Кто может быть сталкивался с такой проблемой?
Такая же проблема, пока не понял как решить...Тоже без даты работает все нормально, только в строку ответа должна попасть дата - все - сразу ошибка(
 

itcommander

Client
Регистрация
25.09.2019
Сообщения
31
Благодарностей
4
Баллы
8
Постом выше, как раз пример с установкой кодировки.
Я имею ввиду при добавлении записей в таблицу сохраняются знаки вопроса. При чтении - все ок.
Может перед добавлением нужно в UTF-8 конвертировать?

string db_charset = "utf8"; установлен, в общем коде charset = db_charset; прописано.
 
Последнее редактирование:

Wide

Client
Регистрация
04.02.2013
Сообщения
945
Благодарностей
257
Баллы
63
Я имею ввиду при добавлении записей в таблицу сохраняются знаки вопроса. При чтении - все ок.
Может перед добавлением нужно в UTF-8 конвертировать?

string db_charset = "utf8"; установлен, в общем коде charset = db_charset; прописано.
В mysql поменяй кодировку в глобальной переменной
 

itcommander

Client
Регистрация
25.09.2019
Сообщения
31
Благодарностей
4
Баллы
8
В mysql поменяй кодировку в глобальной переменной
Кодировка базы и всех таблиц UTF-8. Мне она удобна, т.к. в базе инфа для сайта, страницы которого тоже в UTF-8.
Поменять кодировку базы не получится. Или я что-то не так понял?
 

Wide

Client
Регистрация
04.02.2013
Сообщения
945
Благодарностей
257
Баллы
63
Кодировка базы и всех таблиц UTF-8. Мне она удобна, т.к. в базе инфа для сайта, страницы которого тоже в UTF-8.
Поменять кодировку базы не получится. Или я что-то не так понял?
Я пол дня убил почему кодом крокозябры а кубиком норм на сервере. Хотя явно в коде указано утф8. И на локалке все норм. Пока не сравнил переменные на сервере и на локалке, потом как понял) поменял и все ворк снова.
 
  • Спасибо
Реакции: seodamage

sten30

Client
Регистрация
05.09.2017
Сообщения
254
Благодарностей
31
Баллы
28
К сожалению не нашел составление запроса UPDATE

Мне нужно обновить несколько полей конкретной строки. Обычным кубиком не отправить из-за отсутствия экранирования.
C#:
UPDATE `next_v_rab` SET `nowPrice`={-Variable.nowPrice-},`options`={-Variable.options-},`mnogo_cen`={-Variable.mnogo_cen-},`neskolko_nomerov`={-Variable.neskolko_nomerov-} WHERE LINK = '{-Variable.adr_doc-}';
Вот так не получается
C#:
// пример экранирование спецсимвволов в строке (если не экранировать то одинарная кавычка поломает наш запрос)
string first_name0 = db.escapeString(project.Variables["nowPrice"].Value);
string first_name1 = db.escapeString(project.Variables["options"].Value);
string first_name2 = db.escapeString(project.Variables["mnogo_cen"].Value);
string first_name3 = db.escapeString(project.Variables["neskolko_nomerov"].Value);
string first_name4 = db.escapeString(project.Variables["adr_doc"].Value);

db.query("UPDATE `next_v_rab` SET `nowPrice`=" + project.Variables["nowPrice"].Value + ",`options`=" + project.Variables["options"].Value + ",`mnogo_cen`=" + project.Variables["mnogo_cen"].Value + ",`neskolko_nomerov`=" + project.Variables["neskolko_nomerov"].Value + " WHERE LINK = \'" + project.Variables["adr_doc"].Value + "\';");
 
Последнее редактирование:

BAZAg

Client
Регистрация
08.11.2015
Сообщения
1 788
Благодарностей
2 453
Баллы
113
К сожалению не нашел составление запроса UPDATE

Мне нужно обновить несколько полей конкретной строки. Обычным кубиком не отправить из-за отсутствия экранирования.
C#:
UPDATE `next_v_rab` SET `nowPrice`={-Variable.nowPrice-},`options`={-Variable.options-},`mnogo_cen`={-Variable.mnogo_cen-},`neskolko_nomerov`={-Variable.neskolko_nomerov-} WHERE LINK = '{-Variable.adr_doc-}';
Вот так не получается
C#:
// пример экранирование спецсимвволов в строке (если не экранировать то одинарная кавычка поломает наш запрос)
string first_name0 = db.escapeString(project.Variables["nowPrice"].Value);
string first_name1 = db.escapeString(project.Variables["options"].Value);
string first_name2 = db.escapeString(project.Variables["mnogo_cen"].Value);
string first_name3 = db.escapeString(project.Variables["neskolko_nomerov"].Value);
string first_name4 = db.escapeString(project.Variables["adr_doc"].Value);

db.query("UPDATE `next_v_rab` SET `nowPrice`=" + project.Variables["nowPrice"].Value + ",`options`=" + project.Variables["options"].Value + ",`mnogo_cen`=" + project.Variables["mnogo_cen"].Value + ",`neskolko_nomerov`=" + project.Variables["neskolko_nomerov"].Value + " WHERE LINK = \'" + project.Variables["adr_doc"].Value + "\';");
Попробуйте может быть таким способом получится экранировать.
C#:
string connect_db = "строка подключения к базе...;allowuservariables=True";
var val = new System.Collections.Specialized.OrderedDictionary();
    val["nowPrice"] = project.Variables["nowPrice"].Value;
    val["options"] = project.Variables["options"].Value;
    val["mnogo_cen"] = project.Variables["mnogo_cen"].Value;
    val["neskolko_nomerov"] = project.Variables["neskolko_nomerov"].Value;
    val["adr_doc"] = project.Variables["adr_doc"].Value;
 

string SQL = "UPDATE `next_v_rab` SET `nowPrice`=@nowPrice,`options`=@options,`mnogo_cen`=@mnogo_cen,`neskolko_nomerov`=@neskolko_nomerov WHERE LINK = @adr_doc";
return ZennoPoster.Db.ExecuteNonQuery(SQL, val, ZennoLab.InterfacesLibrary.Enums.Db.DbProvider.MySqlClient,connect_db);
 
  • Спасибо
Реакции: sten30 и volody00

sten30

Client
Регистрация
05.09.2017
Сообщения
254
Благодарностей
31
Баллы
28
Попробуйте может быть таким способом получится экранировать.
Спасибо.
Программа HeidiSQL показала правильный запрос. Заголовки оборачивать в такую кавычку ` , а данные в такую '
C#:
UPDATE `next_v_rab` SET `options`='{-Variable.options-}',`mnogo_cen`='{-Variable.mnogo_cen-}' WHERE `LINK` = '{-Variable.adr_doc-}';
 

BAZAg

Client
Регистрация
08.11.2015
Сообщения
1 788
Благодарностей
2 453
Баллы
113
Спасибо.
Программа HeidiSQL показала правильный запрос. Заголовки оборачивать в такую кавычку ` , а данные в такую '
C#:
UPDATE `next_v_rab` SET `options`='{-Variable.options-}',`mnogo_cen`='{-Variable.mnogo_cen-}' WHERE `LINK` = '{-Variable.adr_doc-}';
Программа HeidiSQL подсказывая правильный запрос предполагает, что внутри Ваших переменных, которые Вы будете подставлять находятся уже подготовленные данные, в которых все нужные символы правильно экранируются.
Если не будете использовать параметры в явном виде - одинарная кавычка никак не поможет экранировать те одинарные кавычки, которые будут находиться внутри переменных которые Вы подставляете в запрос - а значит будете встречаться с ошибками.
Но, если Вам так удобнее - хозяин - барин - как пожелаете.
 

sten30

Client
Регистрация
05.09.2017
Сообщения
254
Благодарностей
31
Баллы
28
Программа HeidiSQL подсказывая правильный запрос предполагает, что внутри Ваших переменных, которые Вы будете подставлять находятся уже подготовленные данные, в которых все нужные символы правильно экранируются.
Если не будете использовать параметры в явном виде - одинарная кавычка никак не поможет экранировать те одинарные кавычки, которые будут находиться внутри переменных которые Вы подставляете в запрос - а значит будете встречаться с ошибками.
Но, если Вам так удобнее - хозяин - барин - как пожелаете.
А как обработать переменную без отправки запроса в базу? Я бы отдельно обрабатывал, а в базу кубиком писал
 

BAZAg

Client
Регистрация
08.11.2015
Сообщения
1 788
Благодарностей
2 453
Баллы
113
А как обработать переменную без отправки запроса в базу? Я бы отдельно обрабатывал, а в базу кубиком писал
В кубике C# так:
C#:
string connect_db = "строка подключения к базе...;allowuservariables=True";
var val = new System.Collections.Specialized.OrderedDictionary();
    val["nowPrice"] = project.Variables["nowPrice"].Value;
    val["options"] = project.Variables["options"].Value;
    val["mnogo_cen"] = project.Variables["mnogo_cen"].Value;
    val["neskolko_nomerov"] = project.Variables["neskolko_nomerov"].Value;
    val["adr_doc"] = project.Variables["adr_doc"].Value;


string SQL = "UPDATE `next_v_rab` SET `nowPrice`=@nowPrice,`options`=@options,`mnogo_cen`=@mnogo_cen,`neskolko_nomerov`=@neskolko_nomerov WHERE LINK = @adr_doc";
return ZennoPoster.Db.ExecuteNonQuery(SQL, val, ZennoLab.InterfacesLibrary.Enums.Db.DbProvider.MySqlClient,connect_db);
В зеленом кубике по работе с базой так (только не помню нужно ли в параметрах там собачку ставить или не нет...):
98970
 

sten30

Client
Регистрация
05.09.2017
Сообщения
254
Благодарностей
31
Баллы
28
Я хотел знать, как на C# задать экранирование символов. То есть обработать одну переменную и положить экранированный текст обратно в переменную.
Также в кубике "Использовать параметры в запросе" - это значит в кубике также задается экранирование?
 

Zippy

Client
Регистрация
14.12.2021
Сообщения
65
Благодарностей
6
Баллы
8

Zippy

Client
Регистрация
14.12.2021
Сообщения
65
Благодарностей
6
Баллы
8
Разобрался. Надо было скопировать общий код из вашего проекта в свой и в ссылках GAC добавить скопированную mysql.data.dll
 

smarchenko

Client
Регистрация
18.01.2014
Сообщения
141
Благодарностей
8
Баллы
18
Доброго времени суток. Огромное спасибо за статью и шаблоны. Получилось реализовать почти все, кроме одного.
Никак не хочет сохранять время в базу. Ошибок никаких не выдает. Переменная в таблице, куда сохраняем время в таблице в формате INT. В чем может быть проблема. Код выполняю вот такой
C#:
var db = project.Context["db"];

string id_video = project.Variables["id_video"].Value;
string requests = project.Variables["href_request"].Value;
string success = project.Variables["href_success"].Value;
string errors = project.Variables["href_errors"].Value;
string locks = project.Variables["locks"].Value;


if ( id_video != "" ){
    
    // получаем текущее юникс-время
    int unixtime = (int)(DateTime.UtcNow - new DateTime(1970, 1, 1)).TotalSeconds;
    
    // обратно устанавливаем статус=0 (свободен) и время последнего использования устанавливаем на текущее
    db.query("UPDATE video SET requests="+requests.ToString()+", use_time="+unixtime.ToString()+" WHERE id_video="+id_video);   
}

// завершаем работу с БД
db.close();
 

WebBot

Client
Регистрация
04.04.2015
Сообщения
1 763
Благодарностей
1 391
Баллы
113
Доброго времени суток. Огромное спасибо за статью и шаблоны. Получилось реализовать почти все, кроме одного.
Никак не хочет сохранять время в базу. Ошибок никаких не выдает. Переменная в таблице, куда сохраняем время в таблице в формате INT. В чем может быть проблема. Код выполняю вот такой
C#:
var db = project.Context["db"];

string id_video = project.Variables["id_video"].Value;
string requests = project.Variables["href_request"].Value;
string success = project.Variables["href_success"].Value;
string errors = project.Variables["href_errors"].Value;
string locks = project.Variables["locks"].Value;


if ( id_video != "" ){
 
    // получаем текущее юникс-время
    int unixtime = (int)(DateTime.UtcNow - new DateTime(1970, 1, 1)).TotalSeconds;
 
    // обратно устанавливаем статус=0 (свободен) и время последнего использования устанавливаем на текущее
    db.query("UPDATE video SET requests="+requests.ToString()+", use_time="+unixtime.ToString()+" WHERE id_video="+id_video);
}

// завершаем работу с БД
db.close();
Вчера вот тут вы приводили структуру своей таблицы и столбца use_time в этой структуре небыло ... а здесь вы пытаетесь ее записать. Она точно есть у вас в таблице?

И в самом запросе не нужно писать requests.ToString() ... переменная requests у вас итак типа string ... .ToString() нужно добавлять когда переменная например типа int, а нужна строка
 
Последнее редактирование:

smarchenko

Client
Регистрация
18.01.2014
Сообщения
141
Благодарностей
8
Баллы
18
Вчера вот тут вы приводили структуру своей таблицы и столбца use_time в этой структуре небыло ... а здесь вы пытаетесь ее записать. Она точно есть у вас в таблице?

И в самом запросе не нужно писать requests.ToString() ... переменная requests у вас итак типа string ... .ToString() нужно добавлять когда переменная например типа int, а нужна строка
А как правильно писать requests.ToString() ? просто +requests+ ?
Да, я добавил еще один столбец
102928
 

WebBot

Client
Регистрация
04.04.2015
Сообщения
1 763
Благодарностей
1 391
Баллы
113

smarchenko

Client
Регистрация
18.01.2014
Сообщения
141
Благодарностей
8
Баллы
18

smarchenko

Client
Регистрация
18.01.2014
Сообщения
141
Благодарностей
8
Баллы
18
просто +requests+ будет достаточно ... эта переменная итак типа string
этот столбец ( use_time ) какого типа? int unsigned ?
а может быть такое что надо еще какую то библиотеку подключить, чтобы работало?
 

smarchenko

Client
Регистрация
18.01.2014
Сообщения
141
Благодарностей
8
Баллы
18
Все получилось. Спасибо большое за помощь =)
 

fazan

Client
Регистрация
25.12.2014
Сообщения
97
Благодарностей
9
Баллы
8
Иногда выбивает ошибку

В чем может быть дело, подскажите кто знает.
Привет. Возникает похожая ошибка при попытке подключения к БД в CSharp :
Выполнение действия CSharp OwnCode: db connect. Reading from the stream has failed.

Не удалось ли найти причины? Поделись пожалуйста.
 

Wide

Client
Регистрация
04.02.2013
Сообщения
945
Благодарностей
257
Баллы
63
  • Спасибо
Реакции: seodamage и fazan

shpionozavr

Client
Регистрация
03.11.2020
Сообщения
3
Благодарностей
0
Баллы
1
Приветствую!

Ранее я подавал заявку на конкурс статей, где хотел разобрать недостатки стандартного кубика для работы с БД (и получаемого из него кода) и вместе с вами пошагово разразработать в общем коде простейший (без каких-либо наворотов и заумностей) класс для работы с MySQL, позволяющий избежать этих недостатков. Но тогда не сложилось, вторую тему по MySQL не одобрили.

Сейчас конкурс шаблонов, поэтому теорию и пошаговую разработку мы пропустим, а я просто приложу шаблон-заготовку с простейшим классом в общем коде, который позволит избежать серьезных недостатков стандартного кода/кубика и сделать работу с MySQL более приятной.

Недостатки стандартного кубика/кода

Главный минус - нет возможности управлять открытием/закрытием коннектов/сессией. Каждый кубик/код работы с БД устанавливает соединение, открывает новую сессию, выполняет SQL запрос и закрывает сессию.

Отсюда проблемы:
  • Невозможно выполнить множество запросов в рамках одной сессии с промежуточной обработкой данных. А именно это чаще всего и нужно для нормальной работы в многопотоке.
  • Невозможно получить Id только что вставленной записи (повторный вызов кубика/кода откроет новую сессию где этой информации не будет)
  • Открытие/закрытие подключений/сессий a) занимает доп. время б) создает доп. нагрузку. Если в шаблоне 50 кубиков работы с БД, то это 50 открытий/закрытий подключений/сессий на 1 поток. А если потоков сотни?
Вдобавок:
  • Отсутствие функции экранирования спецсимволов (это обязательно нужно делать перед вставкой строковых данных в таблицу). Может я плохо искал?
  • Насколько я помню код из кубика не хотел работать со списками созданными в C#, а работал только со списками созданными в ZP. Это очень неудобно.
  • Код из кубика тяжел для восприятия - этакая сборная солянка из хоста/логина/пароля/бд/параметров подклобчения/sql запроса/прочих параметров

Итак, наша задача - решить описанные выше недостатки и сделать работу с БД MySQL более простой и наглядной.

Использование заготовки:


Подготовка ZP. Идем в директорию куда установлен ZP и в папке Progs находим файл MySql.Data.dll . Копируем его в папку ExternalAssemblies находящуюся там же.

Далее открываем заготовку и в кубике C# пишем: (далее идут примеры):

Итак, пример(ы) кода:

C#:
string db_host = "localhost";     // хост
string db_user = "root";          // username для подключения к MySQL
string db_pswd = "";              // пароль для подключения к MySQL
string db_database = "mydb";      // название БД с которой будет работа
string db_charset = "utf8";       // кодировка данных в таблицах

// коннект к MySQL и открытие сессии

DB db = new DB(db_host, db_user, db_pswd, db_database, db_charset);

// все что идет ниже выполняется в рамках одного коннекта/сессии ... это очень важно (!)


// получить 1 результат (скаляр)
// для получения 1 результата всегда используем метод getOne

string count = db.getOne("SELECT COUNT(*) FROM accounts WHERE status=0");
project.SendInfoToLog("Кол-во аккаунтов: "+count,true); // выводим в лог ZP

// получить 1 запись ( запись = 1 строка разделенная на столбцы )
// для получения 1 записи/строки всегда используем метод getRow

List<string> row = db.getRow("SELECT first_name, last_name, status FROM accounts WHERE id=1");

if ( row.Count > 0 ){
    project.SendInfoToLog("Имя: "+row[0],true); // выводим в лог ZP
    project.SendInfoToLog("Фамилия: "+row[1],true);  // выводим в лог ZP
    project.SendInfoToLog("Статус: "+row[2],true);  // выводим в лог ZP
}
else {
    project.SendInfoToLog("запись отсутствует",true);  // выводим в лог ZP
}


// для запросов не возвращающих результата (INSERT/UPDATE/LOCK/UNLOCK/...) всегда используем метод query

// лочим таблицу accounts что бы только 1 поток работал с ней
// P.S вы должны лочить все таблицы и их алиасы с которыми собираетесь работать в рамках строго 1 потока ..
// в этом примере работа идет лишь с 1 таблицей, поэтому и лочится только она

db.query("LOCK TABLES accounts WRITE");

// получить набор строк/столбцов
// для получения набора данных всегда используем метод getAll .. второй параметр - разделитель столбцов в строках ... его можно не указывать, по умолчанию он |

// берем 100 акков со status=0 (свободные), которые при этом дольше всех не брались ( ORDER BY check_time )

List<string> data = db.getAll("SELECT id, first_name, last_name FROM accounts WHERE status=0 ORDER BY check_time LIMIT 100","|");

List<string> ids = new List<string>(); // в этот список сохраним только id полученных данных
for(int i=0; i<data.Count; i++){
    var x = data[i].Split('|');
    project.SendInfoToLog("ID: "+x[0],true);
    project.SendInfoToLog("Имя: "+x[1],true);
    project.SendInfoToLog("Фамилия: "+x[2],true);
    project.SendInfoToLog("--------------",true);
    ids.Add(x[0]); // добавляем очередной id в список ids
}

// текущее юникс-время
int unixtime = (int)(DateTime.UtcNow - new DateTime(1970,1,1)).TotalSeconds;

// здесь, например, делаем чекинг id из списка ids на онлайн в ВК и наполнztv список online теми id которые сейчас онлайн
List<string> online = new List<string>();

// меняем статус у тех кто online (только их мы берем в работу)
if ( online.Count > 0 )
db.query("UPDATE accounts SET status=1 WHERE id IN("+string.Join(",",online)+")");

// обновляем время проверки у всех взятых id
if ( ids.Count > 0 )
db.query("UPDATE accounts SET check_time="+unixtime.ToString()+" WHERE id IN("+string.Join(",",ids)+")");

// разлочиваем таблицу
db.query("UNLOCK TABLES");

// пример экранирования спецсимволов в строке (если не экранировать, то одинарная кавычка поломает наш запрос)
string first_name = db.escapeString("Д'артаньян");

// вставка новой записи
db.query("INSERT INTO accounts SET first_name='"+first_name+"'");

// получение Id только что вставленной записи
string acc_id = db.getOne("SELECT LAST_INSERT_ID()");
project.SendInfoToLog("ID вставленной записи: "+acc_id,true);

// завершаем сессию
db.close();
Надеюсь данная заготовка кому-нибудь пригодится и поможет начать работать с MySQL т.к это открывает вам совершенно иные возможности при создании ваших шаблонов!

К посту приложены 2 файла - mysql_zagotovka.xmlz и primer1.xmlz . В первом файле не реализовывается какая-то конкретная логика, это просто заготовка со встроенным классом + кубик C# с примерами того как используя методы класса коннектиться к БД, делать различные запросы и тд (в общем то же самое что вы видите в примерах в этом посте). Во втором файле (primer1.xmlz) реализована прямо конкретная логика по взятию аккаунтов в работу из БД в многопотоке, там достаточно создать свою таблицу нужной структуры (приведена мной несколькими постами ниже) и подставить свои данные для коннекта к БД. И все, можно юзать в своих проектах!
Если бы я мог проголосовать сейчас то сделал бы это с превеликим удовольствием. Огромное спасибо за труды!!
 

andropovleva

Client
Регистрация
23.11.2019
Сообщения
581
Благодарностей
45
Баллы
28
Как добавить значения других переменных в общую строку, никак не получается что то.

пробовал на переменной mail


106217


106218
 

n0n3mi1y

Client
Регистрация
08.03.2017
Сообщения
1 237
Благодарностей
573
Баллы
113
var
Как добавить значения других переменных в общую строку, никак не получается что то.

пробовал на переменной mail


Посмотреть вложение 106217

Посмотреть вложение 106218
C#:
var mail = "mail text";

project.SendInfoToLog($"My mail is {mail}", false);
Перед данными $, переменную в фигурных скобках.
 
  • Спасибо
Реакции: andropovleva

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)