Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Проблема со строками (DBLib)  [new]
truper
Member

Откуда:
Сообщений: 106
Что имеем.
1. База MSSQL 2008
2. Конект через ZEND через драйвер DBLib
3. Процедуру в базе которая выполяется некие действия

Что пытаемся сделать и что получаем.

@connection_string изначально равен некой строке (varchar(255))
@Login некое число
@cPass некая строка (varchar(128))

select @connection_string = cast(@Login as varchar(16)) + ':' + @cPass + '@' + @connection_string

В итоге если вернуть это страку как
select connection_string = @connection_string
оно отобразится нормальной
но если эту строку в процедуре передать в некую другую процедуру, то мы получим обрезанную строку до символа '@' (менял символ не помогало).
Такая же проблема если эту строку записать в таблицу.
Такая же проблема если эту строку собрать в отдельной функции.
Такая же проблема если пытаться соединить эту строку через "опу"
truncate table _single_string
insert into _single_string(_str) values (cast(@Login as varchar(16)))
update _single_string set _str = _str + ':'
update _single_string set _str = _str + @cPass
update _single_string set _str = _str + '@'
update _single_string set _str = _str + @connection_string

declare @mt_cs varchar(255)
select @mt_cs = _str from _single_string

Что самое интересно если эту процедуру выполнять в мэнеджмент студии или через другую программу то все работает отлично.

Возникает вопрос - каким образом может влиять драйвер DBLib на работу процедуры таким образом, и возможно ли от этого избавиться?
28 май 09, 14:49    [7239948]     Ответить | Цитировать Сообщить модератору
 Re: Проблема со строками (DBLib)  [new]
MsDatabaseru
Member

Откуда: Hobby.MsDatabase.ru
Сообщений: 10937
попробуйте выполнить вашу процедуру в другой среде, через другой коннект,
напрмер из SMS
если передается внутри хранимой процедуры то наверняка ничего не изменится - резка скорее всего из за того что принимающая переменная декларирована с меньшей длиной
28 май 09, 16:02    [7240579]     Ответить | Цитировать Сообщить модератору
 Re: Проблема со строками (DBLib)  [new]
truper
Member

Откуда:
Сообщений: 106
из SMS все работает хорошо, с длинами переменных также все в порядке....
28 май 09, 16:28    [7240812]     Ответить | Цитировать Сообщить модератору
 Re: Проблема со строками (DBLib)  [new]
MsDatabaseru
Member

Откуда: Hobby.MsDatabase.ru
Сообщений: 10937
а профайлером смотрели?
28 май 09, 17:06    [7241068]     Ответить | Цитировать Сообщить модератору
 Re: Проблема со строками (DBLib)  [new]
truper
Member

Откуда:
Сообщений: 106
Можете подсказать что за профайлер, как запускать и как пользоваться?
28 май 09, 17:34    [7241236]     Ответить | Цитировать Сообщить модератору
 Re: Проблема со строками (DBLib)  [new]
MsDatabaseru
Member

Откуда: Hobby.MsDatabase.ru
Сообщений: 10937
sql server profiler инструмент входящий в состав клинтских утилит mssql server
позволяет посмотреть что передается серверу
28 май 09, 17:39    [7241273]     Ответить | Цитировать Сообщить модератору
 Re: Проблема со строками (DBLib)  [new]
truper
Member

Откуда:
Сообщений: 106
В sql server profiler отображается только наздание процедуры и переданные в нее параметры
далее идет строка
audit login
-- network protocol: TCP/IP
set quoted_identifier on
set arithabort off
set numeric_roundabort off
set ansi_warnings on
set ansi_padding on
set ansi_nulls on
set concat_null_yields_null on
set cursor_close_on_commit off
set implicit_transactions off
set language us_english
set dateformat mdy
set datefirst 7
set transaction isolation level read committed

далее
select c.name,c.description from master.dbo.syscharsets c where c.id = convert(tinyint, databasepropertyex ( db_name() , 'sqlcharset'))

Может быть чтото в этих настройках, я пробовал в своей процедуре выставить их все в значение off, результат не изменился
29 май 09, 11:15    [7243139]     Ответить | Цитировать Сообщить модератору
 Re: Проблема со строками (DBLib)  [new]
Glory
Member

Откуда:
Сообщений: 104760
truper
В sql server profiler отображается только наздание процедуры и переданные в нее параметры

Потому что надо больше событий в трассу включать. А не только те, что по-умолчанию предлагают
29 май 09, 11:23    [7243192]     Ответить | Цитировать Сообщить модератору
 Re: Проблема со строками (DBLib)  [new]
truper
Member

Откуда:
Сообщений: 106
Сделал так чтобы отображались все инструкции в процедурах
Нашел в трейсе тут строчку которая "глючит"

SP:StmtCompleted PHP MSSQL_70 3396 8 48823 1 0X############# sp_###### 55 ####\###### ###### 2009-05-29 10:43:05.993 select @connection_string = cast(@Login as varchar(16)) + ':' + @cPass + '@' + @connection_string
250055 757629792 19464 ####### ##### 0 236223201289 0 2009-05-29 10:43:05.993 18310 0 8272 - P 197 3 0 0 1 8

Ничего конкретного тут нет.
Далее там где вызывается расширенная хранимая процедура(в которую попадает эта обрезанная строка), тоже ничего конкретного нет.
Либо я чтото не то смотрю?
29 май 09, 11:51    [7243394]     Ответить | Цитировать Сообщить модератору
 Re: Проблема со строками (DBLib)  [new]
truper
Member

Откуда:
Сообщений: 106
Проблема оказалась в том что переменная @Pass получалась с помощью другой расширенной процедуры которая по ошибке добавляла в конец строки пароля два "левых"(коды меньше 32) символа которые все и портили.
Интересно что эти символы стали отображаться в браузере только после того как я включил трассировку. И еще более интересно почему эти символы влияли только при использовании драйвера DBLib...
29 май 09, 13:24    [7244093]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить