Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Как правильно инициализировать DLL assembly?  [new]
Galina O. Fedorkova
Member

Откуда:
Сообщений: 6
Пробую написать DLL, которая при загрузке считывала бы из БД некоторые значения (один раз) и использовала их при выполнении хранимых процедур.
Верно ли, что глобальные статичные объекты создаются один раз? В какой момент? Существует ли в этот момент подключение к БД?
Инициализация через конструктор статичного объекта, заключающаяся в присваивании значений, отработала корректно.
Обращение из конструктора объекта к БД с запросом на выборку привело к ошибке при первом обращении к функции.
13 июн 12, 16:01    [12708706]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно инициализировать DLL assembly?  [new]
Galina O. Fedorkova
Member

Откуда:
Сообщений: 6
class QTestClass
{
int x;
public:
[SqlFunction(DataAccess = DataAccessKind::Read)]
QTestClass()
{
SqlConnection ^conn = gcnew SqlConnection("context connection=true");
SqlCommand ^Command = gcnew SqlCommand();
Command->CommandText = "SELECT COUNT(*) FROM T1";
Command->Connection = conn;
conn->Open();
SqlDataReader ^Reader = Command->ExecuteReader();
x = (int)Reader[0];
Reader->Close();
conn->Close();
}
int QTestX() {return x;}
};
static QTestClass QTestObj;

public ref class UserDefinedFunctions
{
public:
static SqlInt32 test(SqlString s1)
{
return QTestObj.QTestX();
}
};
13 июн 12, 16:02    [12708715]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно инициализировать DLL assembly?  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
Galina O. Fedorkova
Пробую написать DLL, которая при загрузке считывала бы из БД некоторые значения (один раз) и использовала их при выполнении хранимых процедур.
Верно ли, что глобальные статичные объекты создаются один раз? В какой момент? Существует ли в этот момент подключение к БД?
Инициализация через конструктор статичного объекта, заключающаяся в присваивании значений, отработала корректно.
Обращение из конструктора объекта к БД с запросом на выборку привело к ошибке при первом обращении к функции.


не может быть
13 июн 12, 16:16    [12708877]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно инициализировать DLL assembly?  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
Galina O. Fedorkova
class QTestClass
{
	int x;
public:
	[SqlFunction(DataAccess = DataAccessKind::Read)]
	QTestClass()
	{
        SqlConnection ^conn = gcnew SqlConnection("context connection=true");
        SqlCommand ^Command = gcnew SqlCommand();
		Command->CommandText = "SELECT COUNT(*) FROM T1";
		Command->Connection = conn;
		conn->Open();
		SqlDataReader ^Reader = Command->ExecuteReader();
		x = (int)Reader[0];
		Reader->Close();
		conn->Close();
	}
	int QTestX() {return x;}
};
static QTestClass QTestObj;

public ref class UserDefinedFunctions
{
public:
    static SqlInt32 test(SqlString s1)
    {
		return QTestObj.QTestX();
	}
};
Переместите это в фоум C++
14 июн 12, 09:39    [12711552]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно инициализировать DLL assembly?  [new]
Galina O. Fedorkova
Member

Откуда:
Сообщений: 6
Проблема решена.
Использовала шаблон singleton с инициализацией при первом обращении.
14 июн 12, 16:11    [12714684]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить