Модераторы: 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   Вверх
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
stab
mr.DUDA
Exception

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

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

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


 




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


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

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