SqlDataProviderBase.cs - bug + patch(?)
От: emanov Россия http://alexeiemanov.moikgrug.ru
Дата: 16.03.11 20:36
Оценка: 66 (1)
Всем привет!
В классе
SqlDataProviderBase.cs
есть метод, который согласно комментарию обрезает имя БД в случае если тип определён как "dbName.type", однако этот код обрезает и имя схемы, если имя типа записано, как "dbName.schemaName.type".
Поэтому нужно исправить метод так:

        public override bool DeriveParameters(IDbCommand command)
        {
            SqlCommandBuilder.DeriveParameters((SqlCommand)command);

            foreach (SqlParameter p in command.Parameters)
            {
                // We have to clear UDT type names.
                // Otherwise it will fail with error
                // "Database name is not allowed with a table-valued parameter"
                // but this is exactly the way how they are discovered.
                //
                if (p.SqlDbType == SqlDbType.Structured)
                {
                    var firstDot = p.TypeName.IndexOf('.');
                    if (firstDot >= 0)
                        p.TypeName = p.TypeName.Substring(firstDot + 1);
                }
            }

            return true;
        }

После этого исправления у меня стала вызываться процедура такого вида:

CREATE TYPE bs.Ids AS TABLE ( Id int not null )
GO
create proc sc.ProcessIds
@ids bs.Ids readonly
as;

Без него — exception — не найден тип.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.