Вопросы по работе MySql + С#

Kostass

Client
Регистрация
20.12.2010
Сообщения
144
Благодарностей
9
Баллы
18
Что бы не плодить кучу топиков, буду буду спрашивать все в одном.

Сейчас задача сравнить есть ли в базе строка с аналогичными данными.
т.е. мне нада сравнивать, два поля и статус в своей таблице. Есть ли в табличке work строчка с "login", "pass1" и status=99 ?

C#:
string login = project.Variables["login"].Value;  
string pass1 = project.Variables["pass1"].Value;    

db.query("SELECT FROM work SET status=99 WHERE login AND pass1");
В теории он должен мне вернуть количество строк с совпадениями!?

пишет:
Выполнение действия CSharp OwnCode. You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'FROM work SET status=99 WHERE login AND pass1' at line 1
 
Последнее редактирование:

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 690
Баллы
113
Что бы не плодить кучу топиков, буду буду спрашивать все в одном.

Сейчас задача сравнить есть ли в базе строка с аналогичными данными.
т.е. мне нада сравнивать, два поля и статус в своей таблице. Есть ли в табличке work строчка с "login", "pass1" и status=99 ?

C#:
string login = project.Variables["login"].Value;  
string pass1 = project.Variables["pass1"].Value;    

List<string> row = db.getRow("SELECT FROM work SET status=99 WHERE login AND pass1");
В теории он должен мне вернуть количество строк с совпадениями!?

пишет:
Выполнение действия CSharp OwnCode. You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'FROM work SET status=99 WHERE login AND pass1' at line 1
в строку с запросом переменные надо вставить. примерно так "text1"+login +"text2"
 
  • Спасибо
Реакции: Kostass

Kostass

Client
Регистрация
20.12.2010
Сообщения
144
Благодарностей
9
Баллы
18

alex1988

Client
Регистрация
13.07.2014
Сообщения
358
Благодарностей
141
Баллы
43
можно не много подробнее, не могу вьехать. Спасибо.
Чет вьехать не могу !? Почему используешь SET в запросе SELECT!?
напиши что хочешь выташить с табл и с какими условиями!

SELECT * FROM work WHERE login=что? AND pass1=что? AND status=99;
 
  • Спасибо
Реакции: Damskiy_Ugodnik_477

Kostass

Client
Регистрация
20.12.2010
Сообщения
144
Благодарностей
9
Баллы
18
Чет вьехать не могу !? Почему используешь SET в запросе SELECT!?
напиши что хочешь выташить с табл и с какими условиями!

SELECT * FROM work WHERE login=что? AND pass1=что? AND status=99;
Я хочу узнать есть ли в таблице строки с содержимым переменных login и pass1, со статусом = 99

т.е. поле login= содержит данные переменной в проекте login
AND
и поле pass1=содержит данные переменной в проекте pass1
 

alex1988

Client
Регистрация
13.07.2014
Сообщения
358
Благодарностей
141
Баллы
43
"SELECT * FROM `work` WHERE `login`="+project.Variables["login"].Value+" AND `pass1`="+project.Variables["pass1"].Value+" AND `status`=99;"
 
Последнее редактирование:
  • Спасибо
Реакции: Kostass

Kostass

Client
Регистрация
20.12.2010
Сообщения
144
Благодарностей
9
Баллы
18
"SELECT * FROM `work` WHERE `login`="+project.Variables["login"].Value+" AND `pass1 `="+project.Variables["pass1"].Value+" AND `status `=99";
Выполняю:
C#:
var db = project.Context["db"];

db.query("SELECT * FROM `work` WHERE `login`="+project.Variables["login"].Value+" AND `pass1`="+project.Variables["pass1"].Value+" AND `status`=99");
Ответ:
Выполнение действия CSharp OwnCode. You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'AND `pass1`= AND `status`=99' at line 1
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 690
Баллы
113

Kostass

Client
Регистрация
20.12.2010
Сообщения
144
Благодарностей
9
Баллы
18

alex1988

Client
Регистрация
13.07.2014
Сообщения
358
Благодарностей
141
Баллы
43
Пробуем
"SELECT * FROM `work` WHERE `login`='"+project.Variables["login"].Value+"' AND `pass1`='"+project.Variables["pass1"].Value+"' AND `status`='99';"
 
  • Спасибо
Реакции: Kostass

Kostass

Client
Регистрация
20.12.2010
Сообщения
144
Благодарностей
9
Баллы
18
Пробуем
"SELECT * FROM `work` WHERE `login`='"+project.Variables["login"].Value+"' AND `pass1`='"+project.Variables["pass1"].Value+"' AND `status`='99';"
Так получаю значение :

Выполнение кода C# Результат: ok

Блин как мне теперь понять, нашел он совпадения или нет, так как даже если подставляю ему данные которых нет в таблице, он всеровно выводит мне значение "OK"в переменную.
я почему то думал чт оон мне вывалит количество найденых строк. )))
 

alex1988

Client
Регистрация
13.07.2014
Сообщения
358
Благодарностей
141
Баллы
43
Так получаю значение :

Выполнение кода C# Результат: ok

Блин как мне теперь понять, нашел он совпадения или нет, так как даже если подставляю ему данные которых нет в таблице, он всеровно выводит мне значение "OK"в переменную.
Ок означает что кубик успешно выполнился))
По моему в конце надо return db;
+ убрать галку не возвращать результат в кубике С и указать переменную)

я пополнял знания вот по статье https://zennolab.com/discussion/threads/rabota-s-mysql-v-mnogopotoke-blokirovka-tablic-poluchenie-id-dobavlennoj-zapisi.53728/
Рекомендую)
 
  • Спасибо
Реакции: Kostass

Kostass

Client
Регистрация
20.12.2010
Сообщения
144
Благодарностей
9
Баллы
18

Kostass

Client
Регистрация
20.12.2010
Сообщения
144
Благодарностей
9
Баллы
18
Ок означает что кубик успешно выполнился))
По моему в конце надо return db;
+ убрать галку не возвращать результат в кубике С и указать переменную)
В обще если так то он в переменную ложит : ZennoLab.OwnCode.DB
 

Kostass

Client
Регистрация
20.12.2010
Сообщения
144
Благодарностей
9
Баллы
18
Ребата подскажите пожалуйста как вывести результат в переменную:

C#:
var db = project.Context["db"];

db.query("SELECT * FROM `work` WHERE `login`='"+project.Variables["login"].Value+"' AND `pass1`='"+project.Variables["pass1"].Value+"' AND `status`='99';");
var db = project.Context["db"]; это у меня конект к базе данных.


Не могу не как найти как паравильно положить результат в например переменную "result". Спасибо.
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 690
Баллы
113
попробуй return db.query("SELECT * FROM `work` WHERE `login`='"+project.Variables["login"].Value+"' AND `pass1`='"+project.Variables["pass1"].Value+"' AND `status`='99';");
 
  • Спасибо
Реакции: Kostass

Kostass

Client
Регистрация
20.12.2010
Сообщения
144
Благодарностей
9
Баллы
18
попробуй return db.query("SELECT * FROM `work` WHERE `login`='"+project.Variables["login"].Value+"' AND `pass1`='"+project.Variables["pass1"].Value+"' AND `status`='99';");
Выполнение действия CSharp OwnCode. Нельзя неявно преобразовать тип "void" to "object"

неполучается :(
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 690
Баллы
113

Kostass

Client
Регистрация
20.12.2010
Сообщения
144
Благодарностей
9
Баллы
18
ну приведи как ты объект db формируешь. хоть методы глянем :-)
2020-05-01_202356.png



2020-05-01_202606.png


2020-05-01_202939.png




Все взято с нашего форума.

т.е. я получаю из таблицы строчку, и в этой же таблице ищу совпадения по двум полям + статус=99

Теперь мне нада узнать есть ли совпадения. т.е. вывести в переменную результат!
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 690
Баллы
113
что в using прописано ? у меня на новом проекте нет метода DB , а искать по форуму чот лень :-) ну или ссылку дай где нашел все это.
 
  • Спасибо
Реакции: Kostass

Kostass

Client
Регистрация
20.12.2010
Сообщения
144
Благодарностей
9
Баллы
18
что в using прописано ? у меня на новом проекте нет метода DB , а искать по форуму чот лень :-) ну или ссылку дай где нашел все это.

Код:
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 MySql.Data.MySqlClient;

namespace ZennoLab.OwnCode
{
    /// <summary>
    /// A simple class of the common code
    /// </summary>
    public class CommonCode
    {
        /// <summary>
        /// Lock this object to mark part of code for single thread execution
        /// </summary>
        public static object SyncObject = new object();

        // Insert your code here
    }
    
    
    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);
        }
        
    }   
    
}
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 690
Баллы
113
примеры не смотрел совсем ?
db.query это просто запрос отправляется , без результатов.
там еще методы есть
getAll
getRow
getOne
вот они и получают списки результатов по запросу. внимательнее посмотри пример, там есть как получать результаты. я щас убегаю, освобожусь помогу если будут непонятки.

54913
 
  • Спасибо
Реакции: Kostass

Kostass

Client
Регистрация
20.12.2010
Сообщения
144
Благодарностей
9
Баллы
18
освобожусь помогу если будут непонятки.
Т.к. у меня практически нулевые знания, непонятки будут всегда )
За наводку вам спасибо огромное.
Получилось вот так:
C#:
var db = project.Context["db"];
List<string> row = db.getRow("SELECT * FROM `work` WHERE `login`='"+project.Variables["login"].Value+"' AND `pass1`='"+project.Variables["pass1"].Value+"' AND `status`='99';");
  
if ( row.Count > 0 ){
    project.Variables["result"].Value = row[0];
}
получаю id первой повторяющейся строки, мне этого достаточно!
 
  • Спасибо
Реакции: rol

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 690
Баллы
113

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 690
Баллы
113
тоже что ли на БД перейти.... смотрю такие заготовки шикарные, а я все в таблицах , да таблицах :-) вот до чего доводит консерватизм :ce:
 

AZANIR

Client
Регистрация
09.06.2014
Сообщения
405
Благодарностей
196
Баллы
43

WebBot

Client
Регистрация
04.04.2015
Сообщения
1 719
Благодарностей
1 377
Баллы
113
Что бы посчитать количество строк удовлетворяющих заданным критериям запрос должен иметь вид
SELECT COUNT(*) FROM таблица WHERE условия
Этот запрос возвращает 1 значение => для его получения использовать db.getOne
 
  • Спасибо
Реакции: Kostass

Kostass

Client
Регистрация
20.12.2010
Сообщения
144
Благодарностей
9
Баллы
18
Подскажите как получить количество строк со status=0 ???
 

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