powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Зачем открывать еще один коннект?
31 сообщений из 31, показаны все 2 страниц
Зачем открывать еще один коннект?
    #34902757
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не хотелось бы занимацо кросс-постингом , но, пока неизвестно Кто виноватЪ? И, главное, Что делатЪ?
_________________
"Helo, word!" - 17 errors 56 warnings
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Зачем открывать еще один коннект?
    #34903390
sn1251
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ASE не даёт одновременно несколько открытых запросов держать. OLEDB для второго запроса автоматически открывает новую сессию. Это нормально (Perl DBD::Sybase так же поступает), но при управлении транзакцией с клиента надо учитывать.
...
Рейтинг: 0 / 0
Зачем открывать еще один коннект?
    #34903446
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sn1251
ASE не даёт одновременно несколько открытых запросов держать. OLEDB для второго запроса автоматически открывает новую сессию.

Т.е. Вы хотите сказать, что что-то недовыбралось? Что? Что может недовыбрацо на
Код: plaintext
1.
2.
3.
4.
cn.Open();
cmd.CommandText="select @@spid";
if((tmpObject=cmd.ExecuteScalar())!=null)
	spid=Convert.ToInt64(tmpObject);
???

Хотя... Поигралсо я тут с провайдерами: два коннекта только у ASE OLE DB Provider (sydaase.dll ver. 2.70.0.23).
ASE OLE DB Provider (sydaase.dll ver. 2.70.0.32), Sybase OLEDB Provider for ASE (sybdrvoledb.dll ver. 15.0.0.162), Sybase.Data.AseClient.dll ver. 1.15.162.0, SYBASE ASE ODBC Driver (syodase.dll ver. 4.20.0.15): все сухо - один коннект.
_________________
"Helo, word!" - 17 errors 56 warnings
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Зачем открывать еще один коннект?
    #34904136
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ex_Soft пишет:
> Т.е. Вы хотите сказать, что что-то недовыбралось? Что? Что может
> недовыбрацо на
>
> cn.Open();
> cmd.CommandText="select @@spid";
> if((tmpObject=cmd.ExecuteScalar())!=null)
> spid=Convert.ToInt64(tmpObject);

Вот эта одна строка и может не выбраться. При большом желании запросто можно так
сделать.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Зачем открывать еще один коннект?
    #34904495
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гм... Ну и что же там может не выбирацо? @@spid возвращаецо ж...
_________________
"Helo, word!" - 17 errors 56 warnings
...
Рейтинг: 0 / 0
Зачем открывать еще один коннект?
    #34905127
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ex_SoftГм... Ну и что же там может не выбирацо? @@spid возвращаецо ж...Ну и что?
Ответь на вопрос: когда резалтсет считается полностью выбранным? Правильный ответ: когда клиент явно сказал серверу "я закончил работу с резалтсетом". Где у тебя в исходнике команда закрыть резалтсет?
...
Рейтинг: 0 / 0
Зачем открывать еще один коннект?
    #34905152
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl пишет:
> Ответь на вопрос: когда резалтсет считается полностью выбранным?
> Правильный ответ: когда клиент явно сказал серверу "я закончил работу с
> резалтсетом". Где у тебя в исходнике команда закрыть резалтсет?

Действительно, Close() -то где ? Ну или что там у вас в OLEDB ...
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Зачем открывать еще один коннект?
    #34905528
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Одну минутку ;)
1. MasterZiv
Close() -то где ?

да нет пока Close() - там еще дальше много телодвижений с БД происходит
White Owl
Где у тебя в исходнике команда закрыть резалтсет?

В моем исходнике такой команды и быть не должно: все это должно происходить внутри провайдера при выполнении OleDbCommand.ExecuteScalar(). Опять же:
Ex_Soft
Поигралсо я тут с провайдерами: два коннекта только у ASE OLE DB Provider (sydaase.dll ver. 2.70.0.23) .
ASE OLE DB Provider (sydaase.dll ver. 2.70.0.32) , Sybase OLEDB Provider for ASE (sybdrvoledb.dll ver. 15.0.0.162), Sybase.Data.AseClient.dll ver. 1.15.162.0 , SYBASE ASE ODBC Driver (syodase.dll ver. 4.20.0.15) : все сухо - один коннект .

_________________
"Helo, word!" - 17 errors 56 warnings
...
Рейтинг: 0 / 0
Зачем открывать еще один коннект?
    #34905603
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ex_Soft White Owl
Где у тебя в исходнике команда закрыть резалтсет?

В моем исходнике такой команды и быть не должно: все это должно происходить внутри провайдера при выполнении OleDbCommand.ExecuteScalar().ээээ... Уточни пожалуйста, а что это вообще за библиотека такая? Явно какой-то враппер над OLE DB, но что это конкретно такое?
...
Рейтинг: 0 / 0
Зачем открывать еще один коннект?
    #34906091
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl
Уточни пожалуйста, а что это вообще за библиотека такая?

Std System.Data.OleDb (FW 1.1/FW 2.0)
_________________
"Helo, word!" - 17 errors 56 warnings
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Зачем открывать еще один коннект?
    #34906430
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ex_Soft пишет:
> Close() -то где ?
>
>
> да нет пока Close() - там еще дальше много телодвижений с БД происходит
> White Owl

Statement-то закрыть надо !
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Зачем открывать еще один коннект?
    #34907021
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv
Statement-то закрыть надо !

Не пон... На пальцах можно?
Вы от меня хотите что-ли (образно говоря)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
cn.Open();
cmd.CommandText="select @@spid";
if((tmpObject=cmd.ExecuteScalar())!=null)
	spid=Convert.ToInt64(tmpObject);
cn.Close();

cn.Open();
cmd.CommandText="update SmthTable set SmthField=?";
cmd.ExecuteNonQuery();
cn.Close();
вместо
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
cn.Open();

cmd.CommandText="select @@spid";
if((tmpObject=cmd.ExecuteScalar())!=null)
	spid=Convert.ToInt64(tmpObject);

cmd.CommandText="update SmthTable set SmthField=?";
cmd.ExecuteNonQuery();

cn.Close();

_________________
"Helo, word!" - 17 errors 56 warnings
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Зачем открывать еще один коннект?
    #34907097
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я совсем не знаю OLEDB, но во всех CLI обычно стейтмент (запрос) аллоцируется, выполняется, опционально фетчатся из него данные, потом он (стейтмент) закрывается.
Вот этого "стейтмент закрывается" у тебя видимо нету.
...
Рейтинг: 0 / 0
Зачем открывать еще один коннект?
    #34907120
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv пишет:
> Вот этого "стейтмент закрывается" у тебя видимо нету.


Я поглядел в MSDN , видимо либо это .Cancel , либо .Dispose.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Зачем открывать еще один коннект?
    #34907208
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да ляно... Замяли... Грешу на ASE OLE DB Provider (sydaase.dll ver. 2.70.0.23 )
Потому как выше приведенный код
Ex_Soft
ASE OLE DB Provider (sydaase.dll ver. 2.70.0.32) , Sybase OLEDB Provider for ASE (sybdrvoledb.dll ver. 15.0.0.162) , Sybase.Data.AseClient.dll ver. 1.15.162.0 , SYBASE ASE ODBC Driver (syodase.dll ver. 4.20.0.15) : все сухо - один коннект.


P.S. /me думает: такой асортимент, а ни одно по-людськи не фунциклирует
...
_________________
"Helo, word!" - 17 errors 56 warnings
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Зачем открывать еще один коннект?
    #34907230
Dim2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ex_Soft wrote:

> P.S. /me думает: такой асортимент, а *ни одно* по-людськи не
> фунциклирует....

Ну хоть глючит-то оно по-разному :)?
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Зачем открывать еще один коннект?
    #34908099
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ex_SoftНе пон... На пальцах можно?
Вы от меня хотите что-ли (образно говоря)Мы от тебя хотим отчета о запуске такого кода:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
cn.Open();
cmd.CommandText="select @@spid";
if((tmpObject=cmd.ExecuteScalar())!=null)
	spid=Convert.ToInt64(tmpObject);
cmd.Cancel();

cmd.CommandText="update SmthTable set SmthField=?";
cmd.ExecuteNonQuery();
cn.Close();
...
Рейтинг: 0 / 0
Зачем открывать еще один коннект?
    #34908106
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dim2000
Ну хоть глючит-то оно по-разному :)?

Само собою


ASE OLE DB Provider (sydaase.dll)
2.70.0.23 :
1. Рожает лишний коннект
2. в OleDbCommandBuilder.DeriveParameters()перемешивает ParameterDirection Input -> Output
2.70.0.32 :
1. Входит в ступпор OleDbCommand.ExecuteScalar()
2. Входит в ступпор OleDbDataAdapter.Fill(DataSet,TableName) (по причине неприменимости из-за п.1 - даже не выставлялсо)
м.б. в природе ЭстЪ и другие версии , но мне о них - неизвестно

Sybase OLEDB Provider for ASE (sybdrvoledb.dll)
15.0.0.130 - 15.0.0.162 :
1. Не фунциклирует OleDbConnection.ChangeDatabase()
2. Падает в транзакции OleDbCommandBuilder.DeriveParameters()
3. Кривой OleDbConnection.ServerVersion
4. Если юзать домены (User Defined datatypes) неправильно возвращаецо OleDbType

Sybase.Data.AseClient.dll
1.15.162.0
FW1.1 - по сему сильно не гонялсо

SYBASE ASE ODBC Driver (syodase.dll)
4.20.0.15 :
1. Входит в ступор OdbcCommandBuilder.DeriveParameters(odbc_cmd)
2. Не передает параметры при вызове SP посредством
Код: plaintext
\nodbc_cmd.CommandType=CommandType.StoredProcedure;\nodbc_cmd.CommandText="mathtutor";\nodbc_cmd.Parameters["@mult1"].Value= 5 ;\nodbc_cmd.Parameters["@mult2"].Value= 6 ;\nodbc_cmd.ExecuteNonQuery();\n

Sybase ODBC Driver for ASE (sybdrvodb.dll)
15.0.0.162 :
1. Не передает параметры при вызове SP посредством
Код: plaintext
\nodbc_cmd.CommandType=CommandType.StoredProcedure;\nodbc_cmd.CommandText="mathtutor";\nodbc_cmd.Parameters["@mult1"].Value= 5 ;\nodbc_cmd.Parameters["@mult2"].Value= 6 ;\nodbc_cmd.ExecuteNonQuery();\n

В принципе, я так думаю, этот список будет еще пополняцо... Как так можно
Хотя... Это сладкое слово - откат ...
_________________
"Helo, word!" - 17 errors 56 warnings
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Зачем открывать еще один коннект?
    #34908255
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ASE OLE DB Provider (sydaase.dll)
2.70.0.23
Код: plaintext
\n//  0  коннектов\n\ncn.Open(); //  1  коннект\n\ncmd.CommandText="select @@spid";\nif((tmpObject=cmd.ExecuteScalar())!=null) //  2  коннекта\n\tspid=Convert.ToInt64(tmpObject);\n\nif((tmpObject=cmd.ExecuteScalar())!=null) //  2  коннекта (причем эта cmd выполняецо под @@spid\'ом коннекта, открытого в результате предыдущей cmd.ExecuteScalar())\n\tspid=Convert.ToInt64(tmpObject);\n\ncn.Close(); //  0  коннектов\n
Код: plaintext
\n//  0  коннектов\n\ncn.Open(); //  1  коннект\n\ncmd.CommandText="select @@spid";\nif((tmpObject=cmd.ExecuteScalar())!=null) //  2  коннекта\n\tspid=Convert.ToInt64(tmpObject);\n\ncmd.Cancel(); //  2  коннекта\n\nif((tmpObject=cmd.ExecuteScalar())!=null) //  2  коннекта (причем эта cmd выполняецо под @@spid\'ом коннекта, открытого в результате предыдущей cmd.ExecuteScalar())\n\tspid=Convert.ToInt64(tmpObject);\n\ncn.Close(); //  0  коннектов\n

Посредством всего остального:
Код: plaintext
\n//  0  коннектов\n\ncn.Open(); //  1  коннект\n\ncmd.CommandText="select @@spid";\nif((tmpObject=cmd.ExecuteScalar())!=null) //  1  коннект\n\tspid=Convert.ToInt64(tmpObject);\n\nif((tmpObject=cmd.ExecuteScalar())!=null) //  1  коннект\n\tspid=Convert.ToInt64(tmpObject);\n\ncn.Close(); //  0  коннектов\n

По поводу cmd.Cancel() :
1. В ADO.NET я нигде не встречал применение cmd.Cancel(). Я так подозреваю - это довольно-таки нетрадиционный
метод.
2. Насколько я понял, cmd.Cancel() делает попытку прекратить выполнение команды. Но команда-то уже выполнена - что ж прекращать-то?
3. Даже если, что-то было бы еще на отдачу клиенту и клиент это не забрал, то, IMHO, должен бы сгенерицо exception
_________________
"Helo, word!" - 17 errors 56 warnings
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Зачем открывать еще один коннект?
    #34908320
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ex_Soft пишет:

> 2. Насколько я понял, cmd.Cancel() делает попытку *прекратить
> выполнение* команды. Но команда-то уже выполнена - что ж прекращать-то?

Пока все данные не выбраны, комманда не закончена.
Как ты можешь быть уверен, что все данные выбраны, в твоем коде ?

> 3. Даже если, что-то было бы еще на отдачу клиенту и клиент это не
> забрал, то, IMHO, должен бы сгенерицо exception

Это уж я не знаю как там у вас.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Зачем открывать еще один коннект?
    #34908377
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv
Как ты можешь быть уверен, что все данные выбраны, в твоем коде?

1. SQL Advantage
Код: plaintext
1.
select @@spid
SQL Advantage
16
(1 row affected)

2. MSDN
OleDbCommand.ExecuteScalar Method

Executes the query, and returns the first column of the first row in the result set returned by the query. Extra columns or rows are ignored.

3. Выполняецо
Код: plaintext
1.
(tmpObject=cmd.ExecuteScalar())!=null
4.
Код: plaintext
1.
2.
3.
// spid= 0 
spid=Convert.ToInt64(tmpObject);
// spid= 16 

А. Какие еще доказательства нужны?
Б. Почему, при прочих равных условиях, на других провайдерах/драйверах все сухо?
_________________
"Helo, word!" - 17 errors 56 warnings
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Зачем открывать еще один коннект?
    #34909273
iLLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сдается мне, что ExecuteScalar сама создает нужный ей коннект, а посему
самый первый open() и последний close() работают вхолостую, создавая никому
не нужный коннект. Потести без этих open/close.
ExecuteScalar по идее сама содержит в себе открытие курсора, выборку
резалтсета и закрытие курсора. Это как dw.retrieve() в пауэрбилдере. Поэтому
Cancel() - это не то, что спасет "отца русской демократии".


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Зачем открывать еще один коннект?
    #34909616
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ex_Soft пишет:

> А. Какие еще доказательства нужны?

Хорошо, почему же оно у тебя тогда не работает, если ты такой умный ?
Ладно, не знаю больше что тут можно посоветовать.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Зачем открывать еще один коннект?
    #34909622
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iLLer
Сдается мне, что ExecuteScalar сама создает нужный ей коннект

Да - не... Это Вы с OleDbDataAdapter попутали... ;)
System.InvalidOperationException.Message
ExecuteScalar requires an open and available Connection. The connection's current state is Closed.

_________________
"Helo, word!" - 17 errors 56 warnings
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Зачем открывать еще один коннект?
    #34909701
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv
почему

Ну... Для себя, исходя из выше сказанного/приведенного, я сделал вывод - из-за ASE OLE DB Provider (sydaase.dll ver. 2.70.0.23 )

OLEDB небось пол Индии пишет.


MasterZiv
не работает

А кто сказал, что "не работает"? Оно - работает. Но создает лишний коннект.
MasterZiv
не знаю больше что тут можно посоветовать

Да, вот, я тоже в прострации
Исходя из , получаецо: вообще ничего более-менее нормального - ниц

Можно, правда,

используйте нормальные библиотеки - OPEN CLIENT

подумать еще над этим...
_________________
"Helo, word!" - 17 errors 56 warnings
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Зачем открывать еще один коннект?
    #34923811
Andyn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ex_Soft
Можно, правда,

используйте нормальные библиотеки - OPEN CLIENT

подумать еще над этим...


И как в .Net можно через Open Client работать? У меня тоже есть интерес к такому вопросу.
...
Рейтинг: 0 / 0
Зачем открывать еще один коннект?
    #34930446
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andyn
И как в .Net можно через Open Client работать?

Ну... Навскидку... Ваяем мастдаевскую библию (что бы все было в одном флаконе), а в .NET враппер на нее...
_________________
"Helo, word!" - 17 errors 56 warnings
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Зачем открывать еще один коннект?
    #34938035
Andyn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ex_Soft
Ну... Навскидку... Ваяем мастдаевскую библию (что бы все было в одном флаконе), а в .NET враппер на нее...
_________________
"Helo, word!" - 17 errors 56 warnings
Posted via ActualForum NNTP Server 1.4 Нет, так не пойдет. Проблем больше будет чем преимуществ.
...
Рейтинг: 0 / 0
Зачем открывать еще один коннект?
    #34938212
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andyn
Нет, так не пойдет. Проблем больше будет чем преимуществ.

Да я и сам понимаю, что сие - ректально... Ну, а какие тогда будут предложения? Дергать каждую функцию из .NET'а?
_________________
"Helo, word!" - 17 errors 56 warnings
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Зачем открывать еще один коннект?
    #34941211
Andyn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да нет предложений, самому интересно. :)
...
Рейтинг: 0 / 0
Зачем открывать еще один коннект?
    #34941627
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andyn
Да нет предложений, самому интересно

А мы и спросим у товарищей более умудренных жизненным опытом

По собственному опыту,посмотрев, хотя бы, %SYBASE%\%SYBASE_OCS%\sample\ctlib\arraybind.c подумал, что реализация одного только аналога DataAdapter.Fill(DataSet) выльецо в такое... Помницо когда-то пришлось поюзать Firebird API (причем простейшие функции: isc_add_user/isc_delete_user): дык "очень" увлекательное занятие...
В опчем если мы подрубим CT-Lib к .NET'у можно смело называть его "коммерческим продуктом" со всеми вытекающими

_________________
"Helo, word!" - 17 errors 56 warnings

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
31 сообщений из 31, показаны все 2 страниц
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Зачем открывать еще один коннект?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]