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

rol

Client
Joined
Sep 19, 2017
Messages
43
Reaction score
7
Points
8
Насколько мне известно, лочить можно только таблицу целиком. И дело не в коде автора. Это возможности мускула.
Если Не лочить всю таблицу то все летает хоть в 300 потоков а с локами больше 10 уже душит можно ли как то это оптимизировать в коде автора путем частичной блокировки строк ?
 

Deiccide

Client
Joined
Mar 1, 2019
Messages
6
Reaction score
1
Points
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 запросе прописать?

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

Attachments

  • Thank you
Reactions: PandaCIB

itcommander

Client
Joined
Sep 25, 2019
Messages
31
Reaction score
4
Points
8
Подскажите как определить кириллицу UTF8 при добавлении записей. Предложенный автором код сохраняет знаки вопросом.
Понимаю что нужно установить charset=utf8, но как это сделать?
Спасибо.
 

bizon_stas

Client
Joined
Dec 10, 2017
Messages
5
Reaction score
1
Points
3
Постом выше, как раз пример с установкой кодировки.
 

serg32

Client
Joined
Feb 27, 2015
Messages
545
Reaction score
15
Points
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
Joined
Sep 25, 2019
Messages
31
Reaction score
4
Points
8
Постом выше, как раз пример с установкой кодировки.
Я имею ввиду при добавлении записей в таблицу сохраняются знаки вопроса. При чтении - все ок.
Может перед добавлением нужно в UTF-8 конвертировать?

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

Wide

Client
Joined
Feb 4, 2013
Messages
970
Reaction score
261
Points
63
Я имею ввиду при добавлении записей в таблицу сохраняются знаки вопроса. При чтении - все ок.
Может перед добавлением нужно в UTF-8 конвертировать?

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

itcommander

Client
Joined
Sep 25, 2019
Messages
31
Reaction score
4
Points
8
В mysql поменяй кодировку в глобальной переменной
Кодировка базы и всех таблиц UTF-8. Мне она удобна, т.к. в базе инфа для сайта, страницы которого тоже в UTF-8.
Поменять кодировку базы не получится. Или я что-то не так понял?
 

Wide

Client
Joined
Feb 4, 2013
Messages
970
Reaction score
261
Points
63
Кодировка базы и всех таблиц UTF-8. Мне она удобна, т.к. в базе инфа для сайта, страницы которого тоже в UTF-8.
Поменять кодировку базы не получится. Или я что-то не так понял?
Я пол дня убил почему кодом крокозябры а кубиком норм на сервере. Хотя явно в коде указано утф8. И на локалке все норм. Пока не сравнил переменные на сервере и на локалке, потом как понял) поменял и все ворк снова.
 
  • Thank you
Reactions: seodamage

sten30

Client
Joined
Sep 5, 2017
Messages
262
Reaction score
33
Points
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 + "\';");
 
Last edited:

BAZAg

Client
Joined
Nov 8, 2015
Messages
1,880
Reaction score
2,604
Points
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);
 
  • Thank you
Reactions: sten30 and volody00

sten30

Client
Joined
Sep 5, 2017
Messages
262
Reaction score
33
Points
28
Попробуйте может быть таким способом получится экранировать.
Спасибо.
Программа HeidiSQL показала правильный запрос. Заголовки оборачивать в такую кавычку ` , а данные в такую '
C#:
UPDATE `next_v_rab` SET `options`='{-Variable.options-}',`mnogo_cen`='{-Variable.mnogo_cen-}' WHERE `LINK` = '{-Variable.adr_doc-}';
 

BAZAg

Client
Joined
Nov 8, 2015
Messages
1,880
Reaction score
2,604
Points
113
Спасибо.
Программа HeidiSQL показала правильный запрос. Заголовки оборачивать в такую кавычку ` , а данные в такую '
C#:
UPDATE `next_v_rab` SET `options`='{-Variable.options-}',`mnogo_cen`='{-Variable.mnogo_cen-}' WHERE `LINK` = '{-Variable.adr_doc-}';
Программа HeidiSQL подсказывая правильный запрос предполагает, что внутри Ваших переменных, которые Вы будете подставлять находятся уже подготовленные данные, в которых все нужные символы правильно экранируются.
Если не будете использовать параметры в явном виде - одинарная кавычка никак не поможет экранировать те одинарные кавычки, которые будут находиться внутри переменных которые Вы подставляете в запрос - а значит будете встречаться с ошибками.
Но, если Вам так удобнее - хозяин - барин - как пожелаете.
 

sten30

Client
Joined
Sep 5, 2017
Messages
262
Reaction score
33
Points
28
Программа HeidiSQL подсказывая правильный запрос предполагает, что внутри Ваших переменных, которые Вы будете подставлять находятся уже подготовленные данные, в которых все нужные символы правильно экранируются.
Если не будете использовать параметры в явном виде - одинарная кавычка никак не поможет экранировать те одинарные кавычки, которые будут находиться внутри переменных которые Вы подставляете в запрос - а значит будете встречаться с ошибками.
Но, если Вам так удобнее - хозяин - барин - как пожелаете.
А как обработать переменную без отправки запроса в базу? Я бы отдельно обрабатывал, а в базу кубиком писал
 

BAZAg

Client
Joined
Nov 8, 2015
Messages
1,880
Reaction score
2,604
Points
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
Joined
Sep 5, 2017
Messages
262
Reaction score
33
Points
28
В кубике C# так:
Я хотел знать, как на C# задать экранирование символов. То есть обработать одну переменную и положить экранированный текст обратно в переменную.
Также в кубике "Использовать параметры в запросе" - это значит в кубике также задается экранирование?
 

Zippy

Client
Joined
Dec 14, 2021
Messages
83
Reaction score
9
Points
8
1. Вы используете заготовку с уже включенным в общий код классом?
Такая же ошибка. Не могли бы объяснить, что конкретно нужно добавить в общий код?
 

Zippy

Client
Joined
Dec 14, 2021
Messages
83
Reaction score
9
Points
8
Разобрался. Надо было скопировать общий код из вашего проекта в свой и в ссылках GAC добавить скопированную mysql.data.dll
 

smarchenko

Client
Joined
Jan 18, 2014
Messages
141
Reaction score
8
Points
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
Joined
Apr 4, 2015
Messages
1,794
Reaction score
1,398
Points
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, а нужна строка
 
Last edited:

smarchenko

Client
Joined
Jan 18, 2014
Messages
141
Reaction score
8
Points
18
Вчера вот тут вы приводили структуру своей таблицы и столбца use_time в этой структуре небыло ... а здесь вы пытаетесь ее записать. Она точно есть у вас в таблице?

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

WebBot

Client
Joined
Apr 4, 2015
Messages
1,794
Reaction score
1,398
Points
113

smarchenko

Client
Joined
Jan 18, 2014
Messages
141
Reaction score
8
Points
18
просто +requests+ будет достаточно ... эта переменная итак типа string
этот столбец ( use_time ) какого типа? int unsigned ?
Да, int(11)
 

smarchenko

Client
Joined
Jan 18, 2014
Messages
141
Reaction score
8
Points
18
просто +requests+ будет достаточно ... эта переменная итак типа string
этот столбец ( use_time ) какого типа? int unsigned ?
а может быть такое что надо еще какую то библиотеку подключить, чтобы работало?
 

smarchenko

Client
Joined
Jan 18, 2014
Messages
141
Reaction score
8
Points
18
Все получилось. Спасибо большое за помощь =)
 

fazan

Client
Joined
Dec 25, 2014
Messages
104
Reaction score
13
Points
18
Иногда выбивает ошибку

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

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

Wide

Client
Joined
Feb 4, 2013
Messages
970
Reaction score
261
Points
63
Не удалось ли найти причины? Поделись пожалуйста.
Забил, сделал на кубике.
 
  • Thank you
Reactions: seodamage and fazan

shpionozavr

Client
Joined
Nov 3, 2020
Messages
3
Reaction score
0
Points
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
Joined
Nov 23, 2019
Messages
581
Reaction score
46
Points
28
Как добавить значения других переменных в общую строку, никак не получается что то.

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


106217


106218
 

n0n3mi1y

Client
Joined
Mar 8, 2017
Messages
1,351
Reaction score
671
Points
113
var
Как добавить значения других переменных в общую строку, никак не получается что то.

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


View attachment 106217

View attachment 106218
C#:
var mail = "mail text";

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

Users Who Are Viewing This Thread (Total: 3, Members: 0, Guests: 3)