Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Зачем открывать еще один коннект? / 25 сообщений из 31, страница 1 из 2
29.10.2007, 18:12
    #34902757
Ex_Soft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зачем открывать еще один коннект?
Не хотелось бы занимацо кросс-постингом , но, пока неизвестно Кто виноватЪ? И, главное, Что делатЪ?
_________________
"Helo, word!" - 17 errors 56 warnings
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
30.10.2007, 05:14
    #34903390
sn1251
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зачем открывать еще один коннект?
ASE не даёт одновременно несколько открытых запросов держать. OLEDB для второго запроса автоматически открывает новую сессию. Это нормально (Perl DBD::Sybase так же поступает), но при управлении транзакцией с клиента надо учитывать.
...
Рейтинг: 0 / 0
30.10.2007, 07:42
    #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
30.10.2007, 12:07
    #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
30.10.2007, 13:21
    #34904495
Ex_Soft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зачем открывать еще один коннект?
Гм... Ну и что же там может не выбирацо? @@spid возвращаецо ж...
_________________
"Helo, word!" - 17 errors 56 warnings
...
Рейтинг: 0 / 0
30.10.2007, 16:08
    #34905127
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зачем открывать еще один коннект?
Ex_SoftГм... Ну и что же там может не выбирацо? @@spid возвращаецо ж...Ну и что?
Ответь на вопрос: когда резалтсет считается полностью выбранным? Правильный ответ: когда клиент явно сказал серверу "я закончил работу с резалтсетом". Где у тебя в исходнике команда закрыть резалтсет?
...
Рейтинг: 0 / 0
30.10.2007, 16:13
    #34905152
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зачем открывать еще один коннект?
White Owl пишет:
> Ответь на вопрос: когда резалтсет считается полностью выбранным?
> Правильный ответ: когда клиент явно сказал серверу "я закончил работу с
> резалтсетом". Где у тебя в исходнике команда закрыть резалтсет?

Действительно, Close() -то где ? Ну или что там у вас в OLEDB ...
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
30.10.2007, 17:48
    #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
30.10.2007, 18:05
    #34905603
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зачем открывать еще один коннект?
Ex_Soft White Owl
Где у тебя в исходнике команда закрыть резалтсет?

В моем исходнике такой команды и быть не должно: все это должно происходить внутри провайдера при выполнении OleDbCommand.ExecuteScalar().ээээ... Уточни пожалуйста, а что это вообще за библиотека такая? Явно какой-то враппер над OLE DB, но что это конкретно такое?
...
Рейтинг: 0 / 0
31.10.2007, 01:42
    #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
31.10.2007, 09:50
    #34906430
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зачем открывать еще один коннект?
Ex_Soft пишет:
> Close() -то где ?
>
>
> да нет пока Close() - там еще дальше много телодвижений с БД происходит
> White Owl

Statement-то закрыть надо !
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
31.10.2007, 11:56
    #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
31.10.2007, 12:13
    #34907097
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зачем открывать еще один коннект?
Я совсем не знаю OLEDB, но во всех CLI обычно стейтмент (запрос) аллоцируется, выполняется, опционально фетчатся из него данные, потом он (стейтмент) закрывается.
Вот этого "стейтмент закрывается" у тебя видимо нету.
...
Рейтинг: 0 / 0
31.10.2007, 12:19
    #34907120
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зачем открывать еще один коннект?
MasterZiv пишет:
> Вот этого "стейтмент закрывается" у тебя видимо нету.


Я поглядел в MSDN , видимо либо это .Cancel , либо .Dispose.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
31.10.2007, 12:38
    #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
31.10.2007, 12:41
    #34907230
Dim2000
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зачем открывать еще один коннект?
Ex_Soft wrote:

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

Ну хоть глючит-то оно по-разному :)?
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
31.10.2007, 16:03
    #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
31.10.2007, 16:04
    #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
31.10.2007, 16:43
    #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
31.10.2007, 17:00
    #34908320
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зачем открывать еще один коннект?
Ex_Soft пишет:

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

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

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

Это уж я не знаю как там у вас.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
31.10.2007, 17:14
    #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
01.11.2007, 09:39
    #34909273
iLLer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зачем открывать еще один коннект?
Сдается мне, что ExecuteScalar сама создает нужный ей коннект, а посему
самый первый open() и последний close() работают вхолостую, создавая никому
не нужный коннект. Потести без этих open/close.
ExecuteScalar по идее сама содержит в себе открытие курсора, выборку
резалтсета и закрытие курсора. Это как dw.retrieve() в пауэрбилдере. Поэтому
Cancel() - это не то, что спасет "отца русской демократии".


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

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

Хорошо, почему же оно у тебя тогда не работает, если ты такой умный ?
Ладно, не знаю больше что тут можно посоветовать.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
01.11.2007, 11:23
    #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
01.11.2007, 11:40
    #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
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Зачем открывать еще один коннект? / 25 сообщений из 31, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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