Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > Общие вопросы .NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.04.2010, 15:52   #1
StuDDenT
Пользователь
 
Регистрация: 07.11.2009
Сообщений: 24
По умолчанию MySQL+C#

Приветствую. Вот столкнулся с проблемой, очень надеюсь что кто-нибудь подскажет как ее решить.
При установке MySQL установил кодировку по умолчанию cp1251, создал базу данных. Добавил данные через консоль mysql. Начал писать на C# используя .NET CONNECTOR, но при получении данных из базы они отображаются некоректно. Т.е. если я добавляю данные непосредственно из программы то потом она их читает корректно, но в консоле MySQL отображаются не корректно и наоборот.
Перечитал уже много тем на эту тему, но так и не нашел решения, уже и "CharSet=cp1251" добавил в строку подключения и после установки соединения выполняю команду "SET NAMES cp1251", всеравно ничего не помогает. Может у кого-нибудь была подобная ситуация, подскажите, заранее благодарен.

Код:
public partial class Form1 : Form
    {
        string connStr = "server=localhost;user=root;database=preselling;port=3306;CharSet=cp1251";
        private BindingSource bindingSorce = new BindingSource();
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            MySqlConnection coon = new MySqlConnection(connStr);
            
            try
            {
                coon.Open();
                
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
            MessageBox.Show("Complete");

                
            MySqlCommand cmd = new MySqlCommand("SET NAMES cp1251");
            cmd.Connection = coon;
            cmd.ExecuteNonQuery();
            
            cmd.CommandText = "SELECT * FROM Employee";
            MySqlDataAdapter adapter = new MySqlDataAdapter(cmd);            
            DataSet dataset = new DataSet();
            adapter.Fill(dataset);            
            bindingSorce.DataSource = dataset.Tables[0];
            dataGridView1.DataSource = bindingSorce;
            coon.Close();


        }
StuDDenT вне форума Ответить с цитированием
Старый 08.04.2010, 20:10   #2
dampirik
Форумчанин
 
Регистрация: 02.07.2009
Сообщений: 722
По умолчанию

Ну такое происходит только с рус. языком... Ну у меня покрайне мере такое было.. я просто забил)))
dampirik вне форума Ответить с цитированием
Старый 08.04.2010, 21:36   #3
Arnezami
Форумчанин
 
Регистрация: 04.10.2009
Сообщений: 147
По умолчанию

Смотрите в сторону Encoding: У меня тоже были проблемы с кодировкой - это всё из-за того, что тот кто создавал базу - установил её неверно! Посмотрите пример моего кода, как я исправил эту проблему:

Код:
public user GetSubcriberInfo(string userLogin, string userPasswordHash, ref string errorMessage) 
        {
            user result = new user();
            try
            {
                OpenConnection();
                myCommand.CommandText = "SELECT * FROM user WHERE login='" + userLogin + "' AND password='" + userPasswordHash +"'";
                myCommand.Connection = myConnection;
                MySqlDataReader dataReader = myCommand.ExecuteReader();
                while (dataReader.Read())
                {
                    result.id = Int32.Parse(dataReader.GetValue(0).ToString());
                    result.secname = Encoding.UTF8.GetString(Encoding.UTF8.GetBytes(dataReader.GetValue(1).ToString()));
                    result.name = Encoding.UTF8.GetString(Encoding.UTF8.GetBytes(dataReader.GetValue(2).ToString()));
                    result.ot4estvo = Encoding.UTF8.GetString(Encoding.UTF8.GetBytes(dataReader.GetValue(3).ToString()));
                    result.login = dataReader.GetValue(10).ToString();
                    result.password = dataReader.GetValue(11).ToString();
                    return result;
                }
            }
            catch (Exception ecx)
            {
                errorMessage = "Ошибка авторизации! Текст сообщения: " + ecx;
                return null;
            }
            finally
            {
                CloseConnections();
            }
            return null;
        }
P.S: Прошу не смеяться с имён полей базы данных - её создавал не я, таск был просто написать админку!
Ув. Форумчане! Если мои советы были Вам полезны, не забывайте благодарить в виде повышение рейтинга!!!
http://vkontakte.ru/id6715558

Последний раз редактировалось Arnezami; 08.04.2010 в 21:39.
Arnezami вне форума Ответить с цитированием
Старый 08.04.2010, 21:37   #4
Arnezami
Форумчанин
 
Регистрация: 04.10.2009
Сообщений: 147
По умолчанию

Цитата:
Сообщение от dampirik Посмотреть сообщение
Ну такое происходит только с рус. языком... Ну у меня покрайне мере такое было.. я просто забил)))
Забивать - это не выход!
Ув. Форумчане! Если мои советы были Вам полезны, не забывайте благодарить в виде повышение рейтинга!!!
http://vkontakte.ru/id6715558
Arnezami вне форума Ответить с цитированием
Старый 08.04.2010, 22:25   #5
dampirik
Форумчанин
 
Регистрация: 02.07.2009
Сообщений: 722
По умолчанию

Выводится нормально, вводиться нормально, в программе с которой я работаю нормально, консоль ненормально... почему бы не забить?))
dampirik вне форума Ответить с цитированием
Старый 09.04.2010, 08:28   #6
Teksa
Пользователь
 
Регистрация: 24.08.2007
Сообщений: 88
По умолчанию

ммммм конечно пальцем в небо... но кажется что utf8 нужно попробовать.. то есть "set NAMES utf8"
Teksa вне форума Ответить с цитированием
Старый 09.04.2010, 10:26   #7
TaTT DoGG
Форумчанин
 
Аватар для TaTT DoGG
 
Регистрация: 25.04.2008
Сообщений: 476
По умолчанию

Цитата:
Сообщение от Teksa Посмотреть сообщение
ммммм конечно пальцем в небо... но кажется что utf8 нужно попробовать.. то есть "set NAMES utf8"
так и надо. многие программы (которые работают с MySQL, например dbForge) при создании базы в структуру вписывают именно эту строку, чтобы потом не было проблем с кодировкой
Life if about choices
Make the right choice
TaTT DoGG вне форума Ответить с цитированием
Старый 12.04.2010, 12:56   #8
StuDDenT
Пользователь
 
Регистрация: 07.11.2009
Сообщений: 24
По умолчанию

Спасибо всем за помощь
StuDDenT вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с MySQL в С++ с использованием библиотеки mysql++ oleg kutkov Visual C++ 5 30.12.2010 16:40
обновление в блоге - Работа с MySQL в С++ с использованием библиотеки mysql++ Pblog Обсуждение статей 0 16.08.2009 16:00
MySQL и C++ airotciv SQL, базы данных 0 23.07.2009 15:08
MySQL нужна библ. для Visual C++ (MySql++) Alexoid Visual C++ 8 07.05.2008 18:29