|
|
|
Ошибка при вызове хранимой процедуры с параметром типа xml
|
|||
|---|---|---|---|
|
#18+
Добрый день. Имеется хранимая процедура с входящим параметром типа xml. На стороне приложения .NET в данный параметр передаются валидный xml. Проблема состоит в том, что время от времени Sql Server 2008 возвращает ошибку парсинга данных из данного поля: XML parsing: line 1, character 5461, '>' expected. Лог программы показывает, что '>' на месте, просмотр значений при отладке программы - показывает, что в процедуру передается полностью валидный xml. При перезапуске программы значение 5461 может измениться на любое другое. В процессе работы программы это значение не меняется. Данная ошибка может возникать, а может и не возникать, т.е. один и тот же xml обрабатывается и корректно и вызывает ошибку. Складывается впечатление, что данные, время от времени, просто не успевают дойти до сервера в процедуру. Не поможете задать направление, в какую сторону копать! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2010, 11:21 |
|
||
|
Ошибка при вызове хранимой процедуры с параметром типа xml
|
|||
|---|---|---|---|
|
#18+
Сомнительно. Вероятней всего, что, всё-таки, xml не валидный. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2010, 11:35 |
|
||
|
Ошибка при вызове хранимой процедуры с параметром типа xml
|
|||
|---|---|---|---|
|
#18+
МСУ, 100% валидный я же говорю 1 и тот же xml когда проходит, а когда с ошибкой выпадает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2010, 11:37 |
|
||
|
Ошибка при вызове хранимой процедуры с параметром типа xml
|
|||
|---|---|---|---|
|
#18+
Текст процедуры и текст клиентского кода в студию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2010, 11:45 |
|
||
|
Ошибка при вызове хранимой процедуры с параметром типа xml
|
|||
|---|---|---|---|
|
#18+
Все нашел где проблема... SqlCommand заполнялся параметрами, которые брались из кеша. static private readonly Hashtable Cache = new Hashtable(100); .... SqlCommandBuilder.DeriveParameters(command); lock (Cache.SyncRoot) { Cache.Add(command.CommandText, command.Parameters); } После вызова DeriveParameters для поля типа xml свойство Size объекта Parameter устанавливается абсолютно произвольное. При вытягивании данных параметра из кеша, заполнялось и свойство Size для типа данных Xml. В итоге в на Sql server отправлялось лишь то количество байт из поля Value, которое было указано в свойстве Size. Данное поведение несколько обескураживает т.к. в msdn есть два противоречивых описания по действию параметра Size: The Size property is used for binary and string types. For parameters of type SqlType.String, Size means length in Unicode characters. For parameters of type SqlType.Xml, Size is ignored For variable-length data types, Size describes the maximum amount of data to transmit to the server. For example, for a Unicode string value, Size could be used to limit the amount of data sent to the server to the first one hundred characters. - xml суть данные переменной длинны. Возникает вопрос, откуда SqlCommandBuilder.DeriveParameters(...) берет значение свойства Size для типа данных Xml?!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2010, 12:31 |
|
||
|
Ошибка при вызове хранимой процедуры с параметром типа xml
|
|||
|---|---|---|---|
|
#18+
SqlCommandBuilder.DeriveParameters тут ни при чём. Как только срабатывает сеттер SqlParameter.Value, он автоматически проставляет SqlParameter.Size. В случае, если Вы присваиваете параметру в Value свой xml, он подберет нужный размер и всё будет хорошо. Но, если вручную определить ему размер после срабатывания сеттера Value, меньший чем длина xml, то будет ошибка. Это доказывает то, что: msdnFor parameters of type SqlType.Xml, Size is ignored не выполняется. Кстати, они допустили ошибку, не SqlType, а SqlDbType . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2010, 12:51 |
|
||
|
Ошибка при вызове хранимой процедуры с параметром типа xml
|
|||
|---|---|---|---|
|
#18+
Вообщем, чтобы исключить проблемы, предлагаю перед выполнением хранимой процедуры для типа xml сбросить размер: Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2010, 12:58 |
|
||
|
Ошибка при вызове хранимой процедуры с параметром типа xml
|
|||
|---|---|---|---|
|
#18+
МСУ, я чуть по другому сделал :) command.Parameters["@Xml"].Size = int.MaxValue; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2010, 14:57 |
|
||
|
|

start [/forum/topic.php?fid=17&fpage=60&tid=1351372]: |
0ms |
get settings: |
10ms |
get forum list: |
16ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
86ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
27ms |
get tp. blocked users: |
1ms |
| others: | 238ms |
| total: | 392ms |

| 0 / 0 |
