Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Кодировка  [new]
DoctorWho
Member

Откуда:
Сообщений: 18
Используется SQL Server 2008(SQL_Latin1_General_CP1_CI_AS)

теперь пишем такой код

            int cchar = 215;
            string cmdt;
            string s;
            SqlCommand cmd = new SqlCommand();
            SqlConnection conn = null;
            System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US");
            System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("en-US");
            try
            {
                conn =
                    new SqlConnection(@"Data Source=AEROPC\SQLEXPRESS;Initial Catalog=test ;Integrated Security=SSPI;");
                conn.Open();
                cmd.Connection = conn;
                
                cmdt = "delete from table2";
                cmd.CommandText = cmdt;
                cmd.ExecuteNonQuery();             
                
                cmdt = String.Format( "insert into table2 values ('{0}','{0}')", (char)cchar);
                cmd = new SqlCommand(cmdt, conn);
                cmd.ExecuteNonQuery();

                cmdt = "select top 1 col2 from table2";
                cmd.CommandText = cmdt;
               
                s  =  (string) cmd.ExecuteScalar();
                int a = s[0];
                if (a == cchar) Console.WriteLine("Wow! it worked");
                else Console.WriteLine("Fuck !");
               

            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }
            conn.Close();
а теперь вопрос как сделать что бы if (a == cchar) был истинным ?

Тип данных в столбцах - text
2 дек 09, 14:40    [8008528]     Ответить | Цитировать Сообщить модератору
 Re: Кодировка  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
А так if (a == cchar.ToString())?
2 дек 09, 14:45    [8008576]     Ответить | Цитировать Сообщить модератору
 Re: Кодировка  [new]
DoctorWho
Member

Откуда:
Сообщений: 18
tpg,

да без разницы. Проблема в том что когда код символа больше 127 не работает. И как это решить я не знаю
2 дек 09, 14:47    [8008594]     Ответить | Цитировать Сообщить модератору
 Re: Кодировка  [new]
Konst_One
Member

Откуда:
Сообщений: 11513
вы уверены , что в поле col2 вашего запроса первый символ "Ч" (код 215)
предоставьте скрипт определения вашей таблицы table2
2 дек 09, 14:50    [8008627]     Ответить | Цитировать Сообщить модератору
 Re: Кодировка  [new]
DoctorWho
Member

Откуда:
Сообщений: 18
Konst_One,

нет, в том то и дело что туда не попадает 'Ч' а попадает '?' !
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [dbo].[table2](
	[col1] [text] NULL,
	[col2] [ntext] NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

GO
2 дек 09, 14:52    [8008649]     Ответить | Цитировать Сообщить модератору
 Re: Кодировка  [new]
Glory
Member

Откуда:
Сообщений: 104760
DoctorWho

Тип данных в столбцах - text

Надо ли понимать это как то, что вы в поле с коллейтом SQL_Latin1_General_CP1_CI_AS хотите занести русскую буку Ч ?
2 дек 09, 14:54    [8008667]     Ответить | Цитировать Сообщить модератору
 Re: Кодировка  [new]
Anatoly Podgoretsky
Member

Откуда:
Сообщений: 62917
Откуда в SQL_Latin1_General_CP1_CI_AS буква "Ч"

--
http://www.podgoretsky.com
2 дек 09, 14:54    [8008674]     Ответить | Цитировать Сообщить модератору
 Re: Кодировка  [new]
Konst_One
Member

Откуда:
Сообщений: 11513
   cmdt = String.Format( "insert into table2 values ('{0}','{0}')", (char)cchar);


замените на работу с параметром через коллекцию Parameters
2 дек 09, 14:54    [8008678]     Ответить | Цитировать Сообщить модератору
 Re: Кодировка  [new]
Konst_One
Member

Откуда:
Сообщений: 11513
Anatoly Podgoretsky
Откуда в SQL_Latin1_General_CP1_CI_AS буква "Ч"

--
http://www.podgoretsky.com


+1

PS
вот ведь невнимательность
2 дек 09, 14:55    [8008686]     Ответить | Цитировать Сообщить модератору
 Re: Кодировка  [new]
DoctorWho
Member

Откуда:
Сообщений: 18
Konst_One
Anatoly Podgoretsky
Откуда в SQL_Latin1_General_CP1_CI_AS буква "Ч"

--
http://www.podgoretsky.com


+1

PS
вот ведь невнимательность

буква 'Ч' тут совсем не причем. То что она показывается как 'Ч' в какойто кодировке - меня это как то не волнует. Я сравниваю символы по коду, а не по буквам. И я не пытаюсь занетсти букву 'Ч' я заношу код 215 и потом пытюсь его получить обратно. Проблема в том что коды больше 127 попадают в базу неккоректно.
2 дек 09, 15:27    [8009005]     Ответить | Цитировать Сообщить модератору
 Re: Кодировка  [new]
DoctorWho
Member

Откуда:
Сообщений: 18
Anatoly Podgoretsky
Откуда в SQL_Latin1_General_CP1_CI_AS буква "Ч"

--
http://www.podgoretsky.com

без понятия. меня не волнует откуда она там, может это не Ч а что то похожее на Ч. Проблема как я уже сказал в том что данные как то модифицируются, и не понятно как это исправить.
2 дек 09, 15:29    [8009031]     Ответить | Цитировать Сообщить модератору
 Re: Кодировка  [new]
Glory
Member

Откуда:
Сообщений: 104760
DoctorWho

буква 'Ч' тут совсем не причем. То что она показывается как 'Ч' в какойто кодировке - меня это как то не волнует. Я сравниваю символы по коду, а не по буквам. И я не пытаюсь занетсти букву 'Ч' я заношу код 215 и потом пытюсь его получить обратно. Проблема в том что коды больше 127 попадают в базу неккоректно.

В том то и дело, что вы сравниваете символы, а не коды символов. Потому что символьное поле типа text содержит символы. И содержит именно те символы, что вы отправили серверу(не путать с теми, что вы хотели занести)
2 дек 09, 15:31    [8009046]     Ответить | Цитировать Сообщить модератору
 Re: Кодировка  [new]
DoctorWho
Member

Откуда:
Сообщений: 18
Glory
DoctorWho

буква 'Ч' тут совсем не причем. То что она показывается как 'Ч' в какойто кодировке - меня это как то не волнует. Я сравниваю символы по коду, а не по буквам. И я не пытаюсь занетсти букву 'Ч' я заношу код 215 и потом пытюсь его получить обратно. Проблема в том что коды больше 127 попадают в базу неккоректно.

В том то и дело, что вы сравниваете символы, а не коды символов. Потому что символьное поле типа text содержит символы. И содержит именно те символы, что вы отправили серверу(не путать с теми, что вы хотели занести)



int a = s[0];
                if (a == cchar)
2 дек 09, 15:38    [8009113]     Ответить | Цитировать Сообщить модератору
 Re: Кодировка  [new]
DoctorWho
Member

Откуда:
Сообщений: 18
Glory,

Гдеже там я символы сравниваю ?
типы везеде int.
2 дек 09, 15:40    [8009132]     Ответить | Цитировать Сообщить модератору
 Re: Кодировка  [new]
Glory
Member

Откуда:
Сообщений: 104760
DoctorWho
Glory
DoctorWho

буква 'Ч' тут совсем не причем. То что она показывается как 'Ч' в какойто кодировке - меня это как то не волнует. Я сравниваю символы по коду, а не по буквам. И я не пытаюсь занетсти букву 'Ч' я заношу код 215 и потом пытюсь его получить обратно. Проблема в том что коды больше 127 попадают в базу неккоректно.

В том то и дело, что вы сравниваете символы, а не коды символов. Потому что символьное поле типа text содержит символы. И содержит именно те символы, что вы отправили серверу(не путать с теми, что вы хотели занести)



int a = s[0];
                if (a == cchar)

И что это показывает ? Что в таблицу сервера попал символ Ч ? Вы путаете причину и следствие
А причина в том, что вы заносите неправильные данные
2 дек 09, 15:40    [8009134]     Ответить | Цитировать Сообщить модератору
 Re: Кодировка  [new]
DoctorWho
Member

Откуда:
Сообщений: 18
Konst_One
   cmdt = String.Format( "insert into table2 values ('{0}','{0}')", (char)cchar);


замените на работу с параметром через коллекцию Parameters


заменил. проверил. результат тотже
2 дек 09, 15:41    [8009143]     Ответить | Цитировать Сообщить модератору
 Re: Кодировка  [new]
DoctorWho
Member

Откуда:
Сообщений: 18
Glory
DoctorWho
Glory
DoctorWho

буква 'Ч' тут совсем не причем. То что она показывается как 'Ч' в какойто кодировке - меня это как то не волнует. Я сравниваю символы по коду, а не по буквам. И я не пытаюсь занетсти букву 'Ч' я заношу код 215 и потом пытюсь его получить обратно. Проблема в том что коды больше 127 попадают в базу неккоректно.

В том то и дело, что вы сравниваете символы, а не коды символов. Потому что символьное поле типа text содержит символы. И содержит именно те символы, что вы отправили серверу(не путать с теми, что вы хотели занести)



int a = s[0];
                if (a == cchar)

И что это показывает ? Что в таблицу сервера попал символ Ч ? Вы путаете причину и следствие
А причина в том, что вы заносите неправильные данные


Показывает то что занесенный char 215 не равен полученному.
А вообще как я уже не первый раз говорю, что если заносить символы до 127 то всё работает и правильно возвращается. А при занесении больше чем 127, там просто вопросы в базе и всё
2 дек 09, 15:42    [8009159]     Ответить | Цитировать Сообщить модератору
 Re: Кодировка  [new]
Glory
Member

Откуда:
Сообщений: 104760
DoctorWho

Показывает то что занесенный char 215 не равен полученному.
А вообще как я уже не первый раз говорю, что если заносить символы до 127 то всё работает и правильно возвращается. А при занесении больше чем 127, там просто вопросы в базе и всё

Вы понимаете, что прежде, чем что-то правильно прочитать и сравнить, нужно сначала правильно занести данные ?
Вы видели, какую команду ваша программа отправляет серверу ?
2 дек 09, 15:44    [8009176]     Ответить | Цитировать Сообщить модератору
 Re: Кодировка  [new]
DoctorWho
Member

Откуда:
Сообщений: 18
Glory,

Понимаю !
я и хочу что бы данные правильно занеслись. В этом изначально и стоял вопрос.
Если есть какието идеи как проконтролировать или внести правильно я Вас, внимательно слушаю
2 дек 09, 15:47    [8009204]     Ответить | Цитировать Сообщить модератору
 Re: Кодировка  [new]
Glory
Member

Откуда:
Сообщений: 104760
DoctorWho
Glory,

Понимаю !
я и хочу что бы данные правильно занеслись. В этом изначально и стоял вопрос.
Если есть какието идеи как проконтролировать или внести правильно я Вас, внимательно слушаю

Если вы собрались работать с кодами, то почему поле символьное ?
2 дек 09, 15:49    [8009218]     Ответить | Цитировать Сообщить модератору
 Re: Кодировка  [new]
DoctorWho
Member

Откуда:
Сообщений: 18
Glory,
потому что кладущиеся туда данные разделяются разделителем код которого 215.
2 дек 09, 15:51    [8009234]     Ответить | Цитировать Сообщить модератору
 Re: Кодировка  [new]
Glory
Member

Откуда:
Сообщений: 104760
DoctorWho
Glory,
потому что кладущиеся туда данные разделяются разделителем код которого 215.

Вы разницу между типами данных MSSQL понимаете ?
Вы хотите работать с символьными строками или с бинарными данными ?
2 дек 09, 15:52    [8009253]     Ответить | Цитировать Сообщить модератору
 Re: Кодировка  [new]
DoctorWho
Member

Откуда:
Сообщений: 18
Glory,

Да понимаю. И тут еще дело не в том чего я хочу, это уже есть.
И работа именно с типом text. (ntext - я сделал просто для теста, что бы проверить)
2 дек 09, 15:54    [8009276]     Ответить | Цитировать Сообщить модератору
 Re: Кодировка  [new]
Glory
Member

Откуда:
Сообщений: 104760
DoctorWho
Glory,

Да понимаю. И тут еще дело не в том чего я хочу, это уже есть.
И работа именно с типом text. (ntext - я сделал просто для теста, что бы проверить)


declare @t table(f1 text collate SQL_Latin1_General_CP1_CI_AS)

insert @t select CHAR(215)
select f1, ascii(substring(f1,1,1)) from @t
Когда данные заносятся правильно, то они и читаются правильно
2 дек 09, 15:59    [8009324]     Ответить | Цитировать Сообщить модератору
 Re: Кодировка  [new]
DoctorWho
Member

Откуда:
Сообщений: 18
Glory,
когда данные заносятся из SQL Manager'a - то у меня тут как бы вопроса тоже не возникает. Всё работает. А вот когда вызов идёт из кода, вот тогда не понятно что происходет
2 дек 09, 16:02    [8009357]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить