Модераторы: gambit

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблемма с русским шрифтом, MySQL + C# 
V
    Опции темы
ziga
Дата 24.4.2009, 21:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 273
Регистрация: 25.4.2007

Репутация: нет
Всего: 1



в MySQL создал баззу прописал везде utf8. Подключаюсь к базе :

Код

 public void ConnectToBase(string datasource, string username, string password, string database)
{
            mycon = new MySqlConnection("datasource=" + datasource + ";username=" + username + ";password=" + password + ";database=" + database);
            mycon.Open();
        }


делаю INSERT

Код

                mySql.InsertSQL("insert into t_service (name, cena, comment) values ( '" + textBox1.Text +
                    "'," + textBox2.Text + ",'" + textBox3.Text + "')");


Код

        public void InsertSQL(string SQL)
        {
            myCommand = new MySqlCommand(SQL);
            myCommand.Connection = mycon;
            myCommand.ExecuteNonQuery();
        }


но почему то вместо русских букв везде знаки вопроса, подскажите почему? может при конекте надо что то указать ?

Это сообщение отредактировал(а) ziga - 24.4.2009, 21:18
PM MAIL   Вверх
Idsa
Дата 24.4.2009, 21:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2086
Регистрация: 5.12.2006
Где: Томск

Репутация: 15
Всего: 62



ziga, 
1. используйте параметры.
Код

 string queryText = "insert into t_service (name, cena, comment) values (@name, @cena, @comment)";

 Dictionary<string, object> parameters = new Dictionary<string, object>();
 parameters.Add("name", textBox1.Text);
 parameters.Add("cena", textBox2.Text);
 parameters.Add("comment", textBox3.Text);

 mySql.InsertSQL(queryText, parameters);



Код

        public void InsertSQL(string SQL, IDictionary<string, object> parameters)
        {
            myCommand = new MySqlCommand(SQL);
            foreach (string key in parameters)
              myCommand.Parameters.AddWithValue(key, parameters[key]);
            myCommand.Connection = mycon;
            myCommand.ExecuteNonQuery();
        }

Код писал отруки - может не скомпилиться, но идея, думаю, ясна.

2. Забудьте то, что я написал в пункте 1 и используйте ORM. Объясните мне, ну зачем эти танцы с голым SQL для реализации тривиального DAL? Я, наверное, уже всех задолбал с этой мыслью... но она не дает мне покоя smile

Это сообщение отредактировал(а) Idsa - 24.4.2009, 21:40


--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
ziga
Дата 24.4.2009, 21:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 273
Регистрация: 25.4.2007

Репутация: нет
Всего: 1



что такое 

Цитата(Idsa @  24.4.2009,  21:39 Найти цитируемый пост)
используйте ORM


и что такое 

Цитата(Idsa @  24.4.2009,  21:39 Найти цитируемый пост)
DAL


не селён в сокращениях, объясни по русски тогда я тебя пойму smile

PM MAIL   Вверх
Idsa
Дата 24.4.2009, 22:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2086
Регистрация: 5.12.2006
Где: Томск

Репутация: 15
Всего: 62



ziga, на эти вопросы лучше ответит Гугл.


--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
ziga
Дата 24.4.2009, 22:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 273
Регистрация: 25.4.2007

Репутация: нет
Всего: 1



помогла википедия smile 
ORM - не подойдёт, это мне придётся много кода переписывать. Попробую через параметры как в 1 пункте, но готов выслушать и другие предложения  smile 
PM MAIL   Вверх
Idsa
Дата 24.4.2009, 22:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2086
Регистрация: 5.12.2006
Где: Томск

Репутация: 15
Всего: 62



Цитата(ziga @  25.4.2009,  02:14 Найти цитируемый пост)
ORM - не подойдёт, это мне придётся много кода переписывать.

А сколько кода и SQL'я Вам придется переписывать при каждом изменении схемы базы (при изменении имени атрибута, его типа, nullable/not nullable; изменении имени таблицы - я уж молчу про более радикальные изменения)?

Цитата(ziga @  25.4.2009,  02:14 Найти цитируемый пост)
Попробую через параметры как в 1 пункте, но готов выслушать и другие предложения  smile  

Других вариантов, по сути, и нет. Использование параметров - единственно верный способ написания голых SQL-запросов, который решает ряд проблем, в том числи и описанную Вами. Хотя, если подходить формально, для решения вышеописанной проблемы достаточно приписать букву N перед апострофами:
Код

mySql.InsertSQL("insert into t_service (name, cena, comment) values (N'" + textBox1.Text +
                    "'," + textBox2.Text + ",N'" + textBox3.Text + "')");



--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
ziga
Дата 25.4.2009, 11:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 273
Регистрация: 25.4.2007

Репутация: нет
Всего: 1



Что то с параметрами не получается пишу вроде так же:

Код

        public void InsertSQL(string SQL, IDictionary<string, object> parameters)
        {
            myCommand = new MySqlCommand(SQL);
            foreach (string key in parameters.Keys)
            {
                myCommand.Parameters.AddWithValue(key, parameters[key]);
            }
            myCommand.Connection = mycon;
            myCommand.ExecuteNonQuery();
        }


Код

                Dictionary<string, object> parameters = new Dictionary<string, object>();
                parameters.Add("name", textBox1.Text);
                parameters.Add("cena", textBox2.Text);
                parameters.Add("comment", textBox3.Text);
                mySql.InsertSQL("insert into t_service (name, cena, comment) values (@name, @cena, @comment)", parameters);


в базе смотрю все значения NULL
PM MAIL   Вверх
Idsa
Дата 25.4.2009, 11:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2086
Регистрация: 5.12.2006
Где: Томск

Репутация: 15
Всего: 62



Попробуйте добавлять параметры с указанием символа @:
Код

                Dictionary<string, object> parameters = new Dictionary<string, object>();
                parameters.Add("@name", textBox1.Text);
                parameters.Add("@cena", textBox2.Text);
                parameters.Add("@comment", textBox3.Text);
                mySql.InsertSQL("insert into t_service (name, cena, comment) values (@name, @cena, @comment)", parameters);

Хотя, насколько я помню, SqlClient всегда работал и без @.

Добавлено через 1 минуту и 34 секунды
Цитата(ziga @  25.4.2009,  15:44 Найти цитируемый пост)
в базе смотрю все значения NULL 

Вы лучше не в базе смотрите, а в Profiler'е.

Это сообщение отредактировал(а) Idsa - 25.4.2009, 11:53


--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
ziga
Дата 25.4.2009, 12:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 273
Регистрация: 25.4.2007

Репутация: нет
Всего: 1



Цитата(Idsa @  25.4.2009,  11:53 Найти цитируемый пост)
Попробуйте добавлять параметры с указанием символа @:


не помогло

может в
Код

myCommand.Parameters.AddWithValue(key, parameters[key]);


parameters[key] приводить к типу ToString() ?

Это сообщение отредактировал(а) ziga - 25.4.2009, 12:20
PM MAIL   Вверх
Idsa
Дата 25.4.2009, 12:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2086
Регистрация: 5.12.2006
Где: Томск

Репутация: 15
Всего: 62



Посмотрите в debug'е, что хранится в parameters[key]. Те же значения, что и в TextBox'ах?


--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
ziga
Дата 25.4.2009, 12:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 273
Регистрация: 25.4.2007

Репутация: нет
Всего: 1



Цитата(Idsa @  25.4.2009,  12:25 Найти цитируемый пост)
Посмотрите в debug'е, что хранится в parameters[key]. Те же значения, что и в TextBox'ах?

Да те же

Кстати буквы N перед апострофами не помогли

Это сообщение отредактировал(а) ziga - 25.4.2009, 12:30
PM MAIL   Вверх
Idsa
Дата 25.4.2009, 14:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2086
Регистрация: 5.12.2006
Где: Томск

Репутация: 15
Всего: 62



Цитата(ziga @  25.4.2009,  16:29 Найти цитируемый пост)
Да те же

Покажите, какой запрос отлавливает профайлер.

Цитата(ziga @  25.4.2009,  16:29 Найти цитируемый пост)
Кстати буквы N перед апострофами не помогли

А тип поля в базе какой? Надеюсь, nvarchar, а не varchar?


--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
ziga
Дата 25.4.2009, 16:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 273
Регистрация: 25.4.2007

Репутация: нет
Всего: 1



Цитата(Idsa @  25.4.2009,  14:57 Найти цитируемый пост)
Покажите, какой запрос отлавливает профайлер.

что то ниодной программки найти не могу каторой можно было боы отследить запрос.  Подскажи какую нибуть SQL Monitor не видит
Цитата(Idsa @  25.4.2009,  14:57 Найти цитируемый пост)
А тип поля в базе какой? Надеюсь, nvarchar, а не varchar?


varchar )
PM MAIL   Вверх
Idsa
Дата 25.4.2009, 16:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2086
Регистрация: 5.12.2006
Где: Томск

Репутация: 15
Всего: 62



Цитата(ziga @  25.4.2009,  20:22 Найти цитируемый пост)
Подскажи какую нибуть SQL Monitor не видит

В Пуске в разделе Sql Server'а в папке Performance Tools есть Profiler.

Цитата(ziga @  25.4.2009,  20:22 Найти цитируемый пост)
varchar ) 

Поменяйте на nvarchar. Можно, конечно, настроить, чтобы русские символы корректно хранились в varchar - но потом возникнут такие же грабли с другими языками.


--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
ziga
Дата 25.4.2009, 16:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 273
Регистрация: 25.4.2007

Репутация: нет
Всего: 1



Цитата(Idsa @  25.4.2009,  16:34 Найти цитируемый пост)
В Пуске в разделе Sql Server'а в папке Performance Tools есть Profiler.


У меня какой то левый mySQL, вообще никаких тулсов нет
и в SQL Manager 2007 for mySQL нет типа nvarchar  smile 
расскажи как настроить varchar мне только на 1 раз вообще mySQL нужен и для 1 базы smile


PM MAIL   Вверх
Idsa
Дата 25.4.2009, 17:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2086
Регистрация: 5.12.2006
Где: Томск

Репутация: 15
Всего: 62



Ааа. Речь о MySQL... А я и не обратил внимания.
Видимо, тот провайдер, который Вы используете, не понимает параметры без специального знака и, кроме того, специальный знак там используется другой. Какой именно - нужно смотреть в документации, но могу предположить, что это "%" или ":".

А насчет nvarchar... по-моему в MySQL UTF8 поддерживается типом varchar - так что менять ничего не придется.


--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
ziga
Дата 25.4.2009, 17:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 273
Регистрация: 25.4.2007

Репутация: нет
Всего: 1



Всётаки это

Код

@


а может попробовать при конекте с базой указать кодировку ? как это пишется ? у меня вот так:

Код

        public void ConnectToBase(string datasource, string username, string password, string database)
        {
            mycon = new MySqlConnection("datasource=" + datasource + ";username=" + username + ";password=" + password + ";database=" + database);
            mycon.Open();
        }

PM MAIL   Вверх
Idsa
Дата 25.4.2009, 17:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2086
Регистрация: 5.12.2006
Где: Томск

Репутация: 15
Всего: 62



Цитата(ziga @  25.4.2009,  21:22 Найти цитируемый пост)
Всётаки это

Выделить всёБез подсветки
1:
    
@

Вы уверены? Хочу пруфлинк.


--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
ziga
Дата 25.4.2009, 18:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 273
Регистрация: 25.4.2007

Репутация: нет
Всего: 1



В документации я не нашёл, просто затестил запросы  с : и % пишет что ошибка в синтаксисе, а @ проходит спакойно. Или это ещё ничего не значит ? smile

PM MAIL   Вверх
Idsa
Дата 25.4.2009, 18:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2086
Регистрация: 5.12.2006
Где: Томск

Репутация: 15
Всего: 62



ziga, какой провайдер используете?


--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
ziga
Дата 25.4.2009, 18:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 273
Регистрация: 25.4.2007

Репутация: нет
Всего: 1



несовсем понимаю что подразумивается под словом провайдер ? (для меня это компания через каторую я сижу в инетеsmile )  надеюсь вы имели в виду это : mysql-5.1.30-win32
PM MAIL   Вверх
Idsa
Дата 25.4.2009, 19:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2086
Регистрация: 5.12.2006
Где: Томск

Репутация: 15
Всего: 62



Видимо, это MySQL Connector. Тогда попробуйте символ "?".


--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
ziga
Дата 25.4.2009, 20:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 273
Регистрация: 25.4.2007

Репутация: нет
Всего: 1



Щас волосы на одном месте начну рвать  smile  записи вставляются если ставить "?"  но всё равно вместо русских букв ?????? ??? ?????

попробовал уже и сскодировкой utf8 и с cp1251 результата 0

Это сообщение отредактировал(а) ziga - 25.4.2009, 20:19
PM MAIL   Вверх
ziga
Дата 25.4.2009, 21:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 273
Регистрация: 25.4.2007

Репутация: нет
Всего: 1



заработало smile у меня клиент был с какой то непонятной кадировкой пришлось прям при конекте с базой прописывать кадировку

Код

        public void ConnectToBase(string datasource, string username, string password, string database)
        {
            mycon = new MySqlConnection("datasource=" + datasource + ";username=" + username + ";password=" + password + ";database=" + database + ";CharSet=cp1251;");
            mycon.Open();
        }


Idsa спасибо за помощь ! 
PM MAIL   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
stab
mr.DUDA
Exception

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, stab, mr.DUDA, Exception.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Базы данных под .NET | Следующая тема »


 




[ Время генерации скрипта: 0.0649 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.