Модераторы: gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Создание потоков в расширенной хранимой процедуре, Не могу создать поток 
:(
    Опции темы
ZAK
  Дата 19.5.2010, 16:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 9.7.2007

Репутация: нет
Всего: нет



Доброго времени суток!

Есть задача немного нетривиально распараллелить выполнение запросов. Хочу в расширенной хранимой процедуре использовать потоки, но не выходит. Не пойму почему... Подскажите в каком направлении копать?

Код

using System;
using System.Data;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;


public partial class StoredProcedures
{
    [Microsoft.SqlServer.Server.SqlProcedure]
    public static void TestHP1()
    {
        System.Threading.Thread thread = new System.Threading.Thread(StoredProcedures.Select);
        thread.Start();
    }

    public static void Select()
    {
        using (SqlConnection connection = new SqlConnection("context connection=true"))
        {
            connection.Open();
            SqlCommand command = new SqlCommand("select * from mPSPamGU45", connection);
            SqlContext.Pipe.ExecuteAndSend(command);
        }
    }
};


Выходит такая ошибка:

Код

Выполнение выбранного сценария из файл сценария проекта

A .NET Framework error occurred during execution of user defined routine or aggregate 'TestHP1': 
System.Security.HostProtectionException: Attempted to perform an operation that was forbidden by the CLR host.

The protected resources (only available with full trust) were: All
The demanded resources were: Synchronization, ExternalThreading

System.Security.HostProtectionException: 
   at StoredProcedures.TestHP1()

PM MAIL   Вверх
jonie
Дата 20.5.2010, 00:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 8
Всего: 118



в списке запрещенных смотрели классы ? http://msdn.microsoft.com/en-us/library/ms403276.aspx
есть мнение что так нельзя...


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
ZAK
Дата 20.5.2010, 09:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 9.7.2007

Репутация: нет
Всего: нет



Понял. Спасибо! Буду искать альтернативные способы реализации)
PM MAIL   Вверх
jonie
Дата 20.5.2010, 10:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 8
Всего: 118



ZAK, вообще я не утверждал что там содержится threading.. а вообще распарралеливание обычно делается через Service Broker в MSSQL сколь я знаю....


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
ZAK
Дата 20.5.2010, 13:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 9.7.2007

Репутация: нет
Всего: нет



Использование потоков перечит концепции политики безопасности и доступно только в UNSAFE-сборках. Делайте, мол, что хотите, но мы за это ответственности не несём.. 

Код

...Задание параметра UNSAFE позволяет коду сборки выполнять недопустимые операции в пространстве процессов SQL Server, что может поставить под сомнение надежность и масштабируемость SQL Server...


Это сообщение отредактировал(а) ZAK - 20.5.2010, 13:44
PM MAIL   Вверх
ZAK
Дата 22.5.2010, 13:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 9.7.2007

Репутация: нет
Всего: нет



Почему функция, запущенная из потока ничего не возвращает?

Код

using System;
using System.Data;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;
using System.Security.Permissions;
using System.Threading;

public partial class StoredProcedures
{
    [Microsoft.SqlServer.Server.SqlProcedure]
    [HostProtectionAttribute(Synchronization = true, ExternalThreading = true)]
    public static void TestHP1()
    {
        try
        {
            System.Threading.Thread thread = new System.Threading.Thread(StoredProcedures.Select);
            thread.Start();
            Thread.Sleep(5000);
        }
        catch (Exception ex)
        {
            SqlContext.Pipe.Send(ex.Message);
        }
    }

    public static void Select()
    {
        try
        {
            using (SqlConnection connection = new SqlConnection("context connection=true"))
            {
                connection.Open();
                SqlCommand command = new SqlCommand("select * from mPSPamGU45", connection);
                SqlContext.Pipe.ExecuteAndSend(command);
            }
        }
        catch (Exception ex)
        {
            SqlContext.Pipe.Send(ex.Message);
        }
    }
};

PM MAIL   Вверх
ZAK
Дата 3.6.2010, 10:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 9.7.2007

Репутация: нет
Всего: нет



Так и не понял почему, но из потока ничего не получается вывести. SqlContext.Pipe.Send("набор букв") ничего не даёт. Поэтому я не сразу обнаружил одну важную вещь - в потоке нельзя пользовать SQLConnection)) Доступ к ресурсам SQL-Server возможен только из основного потока. Даже в UNSAFE-сборке.

Попробую поставить вопрос по другому, более глобально: У меня есть набор данных. Для каждого значения мне нужно запустить процедуру, передав его параметром. Есть реализация с использованием курсора. Нужно ухитриться вызов процедур распараллелить. Какими средствами - пока не знаю. Может кто подбросит идею?) Проект на стадии исследования. Не уверен, что параллельный вариант будет выигрышным по времени, но пробовать однозначно стоит.
PM MAIL   Вверх
jonie
Дата 3.6.2010, 11:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 8
Всего: 118



ZAK, я же писал уже - ServiceBroker вам в помощь


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
ZAK
Дата 4.6.2010, 09:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 9.7.2007

Репутация: нет
Всего: нет



jonie, подскажи, плз, где можно про это почитать. Инфы много, только нужной пока не нашёл... Не представляю как его использовать.
PM MAIL   Вверх
jonie
Дата 4.6.2010, 10:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 8
Всего: 118



ZAK, где-где...известно где.. в BooksOnline и в экзаменах майкрософта по MSSQL... погуглить также по форуму sql.ru


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
ZAK
Дата 4.6.2010, 11:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 9.7.2007

Репутация: нет
Всего: нет



Спасибо!
PM MAIL   Вверх
ZAK
Дата 4.6.2010, 11:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 9.7.2007

Репутация: нет
Всего: нет



Ещё вопрос: почему вся работа завязана на статических объектах?
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
stab
mr.DUDA
Exception

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, stab, mr.DUDA, Exception.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Базы данных под .NET | Следующая тема »


 




[ Время генерации скрипта: 0.0919 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.