А попробуйте вместо object SqlVariable или что-то наподобие.
И посмотрите профайлером как у вас деплоится хранимая процедура — скриптик сюда.
Re[2]: Хранимые процедуры на CLR
От:
Аноним
Дата:
26.05.09 05:16
Оценка:
Здравствуйте, Sinix, Вы писали:
S>А попробуйте вместо object SqlVariable или что-то наподобие.
Уже искал и не нашёл.
S>И посмотрите профайлером как у вас деплоится хранимая процедура — скриптик сюда.
Скриптик... я делаю командой IDE "Развернуть решение".
USE [test1]
GO
/****** Object: StoredProcedure [dbo].[Object_Member_Set] Script Date: 05/26/2009 11:15:44 ******/CREATE PROCEDURE [dbo].[Object_Member_Set]
@tid [nvarchar](4000),
@oid [nvarchar](4000),
@mid [nvarchar](4000),
@val [sql_variant]
WITH EXECUTE AS CALLER
AS
EXTERNAL NAME [Server].[UserDefinedFunctions].[Object_Member_Set]
GO
EXEC sys.sp_addextendedproperty @name=N'AutoDeployed', @value=N'yes' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'PROCEDURE',@level1name=N'Object_Member_Set'
GO
EXEC sys.sp_addextendedproperty @name=N'SqlAssemblyFile', @value=N'Object_Member_Set.cs' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'PROCEDURE',@level1name=N'Object_Member_Set'
GO
EXEC sys.sp_addextendedproperty @name=N'SqlAssemblyFileLine', @value=9 , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'PROCEDURE',@level1name=N'Object_Member_Set'
GO
Re: Хранимые процедуры на CLR
От:
Аноним
Дата:
26.05.09 05:48
Оценка:
Или подскажите как обновить (update) поле неизвестным заранее типом значения.
У меня в процедуре есть такой код:
Именно так оно и делается... если не считать возможности поиметь вас через sql injection.
Будет в mid нечто вроде "column]=1; страшный sql;--" — сильно порадуетесь.
Параметры для того и заведены, чтобы не было таких дыр.
Если у вас никак не обойтись без конкатенации строк — делайте валидацию и экранируйте служебные символы.
Re[3]: Хранимые процедуры на CLR
От:
Аноним
Дата:
26.05.09 09:07
Оценка:
Спасибо, Sinix, за участие и рекомендации, буду их учитывать, но проблема, как всегда в невнимательности...
у меня в самом начале метода (процедуры) написано "val = null;" (!)
(я наверно код из такого же метода, но заканчивающегося на "Get" скопировал...)