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

  • Автор темы Автор темы WebBot
  • Дата начала Дата начала
  • Теги Теги
    mysql
var

C#:
Развернуть Свернуть Копировать
var mail = "mail text";

project.SendInfoToLog($"My mail is {mail}", false);

Перед данными $, переменную в фигурных скобках.

Помоему что то не то(

В эту строку мне нужно передать значения переменных
login
pass
mail

db.query("UPDATE Account_FB SET СЮДА ЛОГИН, СЮДА ПАСС,СЮДА MAIL, status=0, use_time="+unixtime.ToString()+" WHERE id="+id);
 
Помоему что то не то(

В эту строку мне нужно передать значения переменных
login
pass
mail

db.query("UPDATE Account_FB SET СЮДА ЛОГИН, СЮДА ПАСС,СЮДА MAIL, status=0, use_time="+unixtime.ToString()+" WHERE id="+id);

db.query("UPDATE Account_FB SET login='"+project.Variables["login"].Value+"', pass='"+project.Variables["pass"].Value+"', mail='"+project.Variables["mail"].Value+"', status=0, use_time="+unixtime.ToString()+" WHERE id='"+id+"'");
 
Последнее редактирование:
  • Спасибо
Реакции: andropovleva
Вроде все переменные застринговал, но получаю фатальную ошибку(
Стринговал по той причине что в переменной могут содержаться не только буквы но и числа.

106219


106220


C#:
Развернуть Свернуть Копировать
var db = project.Context["db"];

string name = project.Variables["name"].Value;
string login = project.Variables["login"].Value;
string pass = project.Variables["pass"].Value;
string mail = project.Variables["mail"].Value;
string pass_mail = project.Variables["pass_mail"].Value;
string avatar = project.Variables["avatar"].Value;
string date_of_birth = project.Variables["avatar"].Value;
string ID_acc = project.Variables["ID_acc"].Value;
string cookie = project.Variables["cookie"].Value;
string token_eaab = project.Variables["token_eaab"].Value;
string fp = project.Variables["fp"].Value;
string useragent = project.Variables["useragent"].Value;
string photo = project.Variables["photo"].Value;
string rk_id = project.Variables["rk_id"].Value;
string bm_id = project.Variables["bm_id"].Value;
string token_EAAG = project.Variables["token_EAAG"].Value;
string bm_ssylka = project.Variables["bm_ssylka"].Value;
string id = project.Variables["id"].Value;

if ( id != "" ){
   
    // получаем текущее юникс-время
    int unixtime = (int)(DateTime.UtcNow - new DateTime(1970,1,1)).TotalSeconds;
   
    // обратно устанавливаем статус=0 (свободен) и время последнего использования устанавливаем на текущее
    db.query("UPDATE Account_FB SET name= '"+ project.Variables["name"].Value.ToString() +"',login= '"+ project.Variables["login"].Value.ToString() +"',pass= '"+ project.Variables["pass"].Value.ToString() +"',mail= '"+ project.Variables["mail"].Value.ToString() +"',pass_mail= '"+ project.Variables["pass_mail"].Value.ToString() +"',avatar= '"+ project.Variables["avatar"].Value.ToString() +"',date_of_birth= '"+ project.Variables["date_of_birth"].Value.ToString() +"',ID_acc= '"+ project.Variables["ID_acc"].Value.ToString() +"',cookie= '"+ project.Variables["cookie"].Value.ToString() +"',token_eaab= '"+ project.Variables["token_eaab"].Value.ToString() +"',fp= '"+ project.Variables["fp"].Value.ToString() +"',useragent= '"+ project.Variables["useragent"].Value.ToString() +"',photo= '"+ project.Variables["photo"].Value.ToString() +"',rk_id= '"+ project.Variables["rk_id"].Value.ToString() +"',bm_id= '"+ project.Variables["bm_id"].Value.ToString() +"',token_EAAG= '"+ project.Variables["token_EAAG"].Value.ToString() +"',bm_ssylka= '"+ project.Variables["bm_ssylka"].Value.ToString() +"', status=0, use_time="+unixtime.ToString()+" WHERE id="+id);
}

// завершаем работу с БД
db.close();
 
Вроде все переменные застринговал, но получаю фатальную ошибку(
Стринговал по той причине что в переменной могут содержаться не только буквы но и числа.

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

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

C#:
Развернуть Свернуть Копировать
var db = project.Context["db"];

string name = project.Variables["name"].Value;
string login = project.Variables["login"].Value;
string pass = project.Variables["pass"].Value;
string mail = project.Variables["mail"].Value;
string pass_mail = project.Variables["pass_mail"].Value;
string avatar = project.Variables["avatar"].Value;
string date_of_birth = project.Variables["avatar"].Value;
string ID_acc = project.Variables["ID_acc"].Value;
string cookie = project.Variables["cookie"].Value;
string token_eaab = project.Variables["token_eaab"].Value;
string fp = project.Variables["fp"].Value;
string useragent = project.Variables["useragent"].Value;
string photo = project.Variables["photo"].Value;
string rk_id = project.Variables["rk_id"].Value;
string bm_id = project.Variables["bm_id"].Value;
string token_EAAG = project.Variables["token_EAAG"].Value;
string bm_ssylka = project.Variables["bm_ssylka"].Value;
string id = project.Variables["id"].Value;

if ( id != "" ){
  
    // получаем текущее юникс-время
    int unixtime = (int)(DateTime.UtcNow - new DateTime(1970,1,1)).TotalSeconds;
  
    // обратно устанавливаем статус=0 (свободен) и время последнего использования устанавливаем на текущее
    db.query("UPDATE Account_FB SET name= '"+ project.Variables["name"].Value.ToString() +"',login= '"+ project.Variables["login"].Value.ToString() +"',pass= '"+ project.Variables["pass"].Value.ToString() +"',mail= '"+ project.Variables["mail"].Value.ToString() +"',pass_mail= '"+ project.Variables["pass_mail"].Value.ToString() +"',avatar= '"+ project.Variables["avatar"].Value.ToString() +"',date_of_birth= '"+ project.Variables["date_of_birth"].Value.ToString() +"',ID_acc= '"+ project.Variables["ID_acc"].Value.ToString() +"',cookie= '"+ project.Variables["cookie"].Value.ToString() +"',token_eaab= '"+ project.Variables["token_eaab"].Value.ToString() +"',fp= '"+ project.Variables["fp"].Value.ToString() +"',useragent= '"+ project.Variables["useragent"].Value.ToString() +"',photo= '"+ project.Variables["photo"].Value.ToString() +"',rk_id= '"+ project.Variables["rk_id"].Value.ToString() +"',bm_id= '"+ project.Variables["bm_id"].Value.ToString() +"',token_EAAG= '"+ project.Variables["token_EAAG"].Value.ToString() +"',bm_ssylka= '"+ project.Variables["bm_ssylka"].Value.ToString() +"', status=0, use_time="+unixtime.ToString()+" WHERE id="+id);
}

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

Посмотри конец строки WHERE id="+id); что я тебе написал WHERE id='"+id+"'")
 
  • Спасибо
Реакции: andropovleva
Как добавить значения других переменных в общую строку, никак не получается что то.

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


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

Посмотреть вложение 106218
Можно не создавать доп строку и отправить сразу переменную

UPDATE Account_FB SET 'mail'='"+project.Variables["mail"].Value+"' , status =0
 
  • Спасибо
Реакции: andropovleva
Почему то при сохранении кук в БД они ломаются и становятся невалидными, может кто сталкивался с таким, подскажите в чем может быть дело?
 
Почему то при сохранении кук в БД они ломаются и становятся невалидными, может кто сталкивался с таким, подскажите в чем может быть дело?
сохраняй в безлопастном формате. JSON, base64. или экранируй проблемные символы, которые база данных не проглатывает.
 
у меня конитель с "" и \\ как сделать что бы в БД записывались куки уже в рабочем состоянии без всякого декодирования?
 
106737
так должно быть

106738
бд сделало так

106739
еще момент должно быть так

106740
бд сделал так


106741
и тут еще бд убрал 1 \ должно быть \\
 
106743
юзайте этот кубик все кто столкнулся с подобным, решил проблему.
 
  • Спасибо
Реакции: SlipDez
WebBot
Help. Уже убил огромное количество времени все никак не могу понять как обновить данные таблицы если колонка и значение совпадает
Пример
UPDATE tabl0 SET 1='1' WHERE account =2

Ругается все время на строку 1='1' . Перерыл множество тем на сторонних ресурсах вроде и решение описывается но никак не могу понять
 
  • Спасибо
Реакции: Phoenix78
@WebBot скажи, будь добр, а как использовать START TRANSACTION|COMMIT ? Чтобы откатывать изменения всех запросов в рамках одной сессии при неудаче в каком-либо из запросов.
 
@WebBot скажи, будь добр, а как использовать START TRANSACTION|COMMIT ? Чтобы откатывать изменения всех запросов в рамках одной сессии при неудаче в каком-либо из запросов.
Вопрос снят! db.query("START TRANSACTION"); db.query("ROLLBACK"); db.query("COMMIT "); - прекрасно работают.
 
  • Спасибо
Реакции: djaga
Если второй поток попытается достучатся до таблицы которая заблокирована (с ней работает первый поток), что будет?
Будет ошибка или второй поток сам подождет пока таблица разблокируется?
 
Если второй поток попытается достучатся до таблицы которая заблокирована (с ней работает первый поток), что будет?
Будет ошибка или второй поток сам подождет пока таблица разблокируется?
будет ждать!
 
  • Спасибо
Реакции: TommyTuta
.
 
Последнее редактирование:
Если так случилось, что в базе несколько таблиц разных проектов.
Когда лочится таблица, то указывается какая конкретно - "LOCK TABLES accounts WRITE".
А в конце разлочиваются все "UNLOCK TABLES".

Означает ли это, что для разлочивания тоже нужно указывать какая именно таблица должна быть разблокирована, типа "UNLOCK TABLE accounts"?
 
Всем привет. Появилась потребность работать из Zennodroid с Mysql в многопотоке.
В Zennoposter по примерам приведенным в статье удалось осилить эту задачу.
Но в Zennodroid не удается завести приведенные в статье кубики. Так понимаю ошибка связана с общим кодом. Вот текст ошибки из лога:
Компиляция кода проекта Ошибка при компиляции общего кода "CS0246" The type or namespace name "Mysqlconnection" could not be found (are you missing a using directive or an assembly reference?). [Строка: 49; Столбец: 11]
Подскажите пжл, что нужно написать в общий код, чтобы кубики заработали в ZD?

Что было сделано.
1. В директории куда установлен Zennodroid из папки Progs скопировал MySql.Data.dll в папку ExternalAssemblies находящуюся там же.
2. Добавил блок "Ссылки из GAC". Добавил System.web
3. В директивы usinq и общий код ZD скопировал строчки из одноименного кубика ZP прикреплённого к статье проекта.
Вот содержимое:

C#:
Развернуть Свернуть Копировать
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.IO;
using System.Text.RegularExpressions;
using ZennoLab.CommandCenter;
using ZennoLab.InterfacesLibrary;
using ZennoLab.InterfacesLibrary.ProjectModel;
using ZennoLab.InterfacesLibrary.ProjectModel.Collections;
using ZennoLab.InterfacesLibrary.ProjectModel.Enums;
using ZennoLab.Macros;
using Global.ZennoExtensions;
using ZennoLab.Emulation;
using ZennoLab.CommandCenter.TouchEvents;
using ZennoLab.CommandCenter.FullEmulation;
using ZennoLab.InterfacesLibrary.Enums;
using ZennoLab.InterfacesLibrary.ZennoDroid;
using ZennoLab.InterfacesLibrary.ZennoDroid.Enums;

namespace ZennoLab.OwnCode

    
    
    public class DB
    {
        private string hostname;
        private string username;
        private string password;
        private string database;
        private string charset;
        private string result;
        private MySqlConnection conn;
        
        
        public DB(string db_hostname, string db_username, string db_password, string db_database, string db_charset="utf8"){
            hostname = db_hostname;
            username = db_username;
            password = db_password;
            database = db_database;
            charset = db_charset;
            result = String.Empty;
            string db_port =  "3306";
            
            var m = db_hostname.Split(':');
            if ( m.Length == 2 ){
                db_hostname = m[0];
                db_port = m[1];
            }
            
            var connectionString = "server="+db_hostname+";user="+db_username+";database="+db_database+";port="+db_port+";password="+db_password+";pooling=False;";
            conn = new MySqlConnection(connectionString);

            open();
        }

        
        public void open(){
            conn.Open();
        }       

        
        public void close(){
            conn.Close();   
        }       
        
        public void query(string query){
            MySqlCommand command = new MySqlCommand(query, conn);
            command.ExecuteNonQuery();
        }
        
        public List<string> getAll(string query, string fieldSeparator="|"){
            
            var result = new List<string>();

            MySqlCommand command = new MySqlCommand(query, conn);           
            
            MySqlDataReader reader = command.ExecuteReader();
            while (reader.Read())
            {
                List<string> fields = new List<string>();
                for(int i=0; i<reader.FieldCount; i++)
                fields.Add(reader[i].ToString());
                
                result.Add(string.Join(fieldSeparator,fields));
                
            }
            reader.Close();
            
            return result;           
        }

        public List<string> getRow(string query){

            MySqlCommand command = new MySqlCommand(query, conn);           
            
            MySqlDataReader reader = command.ExecuteReader();
            
            if ( reader.Read() ){
        
                List<string> result = new List<string>();
                for(int i=0; i<reader.FieldCount; i++)
                result.Add(reader[i].ToString());

                reader.Close();
                return result;               
            }
            
            reader.Close();
            return new List<string>();           
        }
        
        
        public string getOne(string query){
             MySqlCommand command = new MySqlCommand(query, conn);
            string result = "";
            try { result = command.ExecuteScalar().ToString(); } catch{}
            return result;
        }
        
        
        public string escapeString(string text){           
            return MySql.Data.MySqlClient.MySqlHelper.EscapeString(text);
        }
        
    }   
    
}
 
WebBot спасибо за инфу, очень полезно. А можно ли поставлять прокси при обращении к БД? Чтобы запросы к БД шли через прокси
 
Подскажите, а как-то можно получить сразу несколько значений которые отдаются по запросу типа SELECT?
getone получает только первое, а у меня их много. getRow тоже не срабатывает
 
Подскажите, а как-то можно получить сразу несколько значений которые отдаются по запросу типа SELECT?
getone получает только первое, а у меня их много. getRow тоже не срабатывает
116355
 
Попался интересный случай - при отработке из под постера запроса с условием WHERE field LIKE '%Текст на русском%' возвращается пустой результат.
Этот же запрос из другого клиента выполняется корректно.
 
@WebBot подскажи... вот выполнил я подключение к базе.

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

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

// сохраняем объект в контексте что бы использовать его в других кубиках
project.Context["db"] = db;

ВОПРОС: Как долго я могу держать это подключение?

ПОЯСНЮ: есть 2 базы данных. Одна на хостинге, в которую вебхуки из ТГ летят. Вторая на локальной машине. Задача: максимально быстро и безболезненно переносить данные с хоста на локальный ПК. Пишу ТГ бота для управления своими проектами и задачами.

Знаю что зацикленные шаблоны тоже не есть хорошо. Предположим раз 15-20 минут соеденение буду закрывать и открывать поновой. Нормально?

Может есть способы интересней?
 
Почему не выводит цифры в лог?

Есть таблица
----------------------------
id | text | id_pric | cena |
----------------------------
1 | test | 386 | 42000|
----------------------------

C#:
Развернуть Свернуть Копировать
string count = db.getOne("SELECT cena FROM test WHERE id=1");

project.SendInfoToLog("Кол-во аккаунтов: "+count,true); // выводим в лог ZP
 
Последнее редактирование:

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