Текущее состояние соединения: Closed.
От: Vglaz Россия www.i-cube.ru
Дата: 23.10.05 14:46
Оценка:
Такая проблема.
в Винд-приложении
такой код работает:

            DbManager.AddConnectionString("Server=.;Database=Northwind;Integrated Security=SSPI");

            using (DbManager db = new DbManager())
            {
                db.SetCommand(@"SELECT * FROM Categories").ExecuteScalar();
            }


в вот в ВЕБ-прилоджении выдается сообщение об ошибке:

Для ExecuteReader требуется открытое доступное соединение. Текущее состояние соединения: Closed.



Код один и тотже.
почему такое?
Re: Текущее состояние соединения: Closed.
От: IT Россия linq2db.com
Дата: 23.10.05 14:54
Оценка:
Здравствуйте, Vglaz, Вы писали:

V>
V>            DbManager.AddConnectionString("Server=.;Database=Northwind;Integrated Security=SSPI");

V>            using (DbManager db = new DbManager())
V>            {
V>                db.SetCommand(@"SELECT * FROM Categories").ExecuteScalar();
V>            }    
V>


Попробуй выделенную строчку в Global.asax перенести. Она должна вызываться только один раз. Либо задай строку конфигурации в Web.config файле.
... << RSDN@Home 1.2.0 alpha rev. 0>>
Если нам не помогут, то мы тоже никого не пощадим.
Re[2]: Текущее состояние соединения: Closed.
От: Vglaz Россия www.i-cube.ru
Дата: 23.10.05 16:03
Оценка:
Здравствуйте, IT, Вы писали:

IT>Здравствуйте, Vglaz, Вы писали:


V>>
V>>            DbManager.AddConnectionString("Server=.;Database=Northwind;Integrated Security=SSPI");

V>>            using (DbManager db = new DbManager())
V>>            {
V>>                db.SetCommand(@"SELECT * FROM Categories").ExecuteScalar();
V>>            }    
V>>


IT>Попробуй выделенную строчку в Global.asax перенести. Она должна вызываться только один раз. Либо задай строку конфигурации в Web.config файле.


тоже самое.

Добавил сюда:
    public class Global : System.Web.HttpApplication
    {
        /// <summary>
        /// Required designer variable.
        /// </summary>
        private System.ComponentModel.IContainer components = null;

        public Global()
        {
            InitializeComponent();
            DbManager.AddConnectionString("Server=.;Database=Northwind;Integrated Security=SSPI");
        }


подробнее об ошибке:


Ошибка источника: 


Строка 84:             using (DbManager db = new DbManager())
Строка 85:             {
Строка 86:                 db.SetCommand(@"SELECT * FROM Categories").ExecuteScalar();
Строка 87: 
Строка 88:                  al = db
 

Исходный файл: c:\inetpub\wwwroot\advancedtreeview\webform1.aspx.cs    Строка: 86 

Трассировка стека: 


[InvalidOperationException: Для ExecuteReader требуется открытое доступное соединение. Текущее состояние соединения: Closed.]
   System.Data.SqlClient.SqlCommand.ValidateCommand(String method, Boolean executing)
   System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream)
   System.Data.SqlClient.SqlCommand.ExecuteScalar()
   Rsdn.Framework.Data.DbManager.ExecuteScalar()

[RsdnDbManagerException: Для ExecuteReader требуется открытое доступное соединение. Текущее состояние соединения: Closed.]
   Rsdn.Framework.Data.DbManager.HandleException(Exception ex)
   Rsdn.Framework.Data.DbManager.ExecuteScalar()
   AdvancedTreeView.WebForm1.FillNodes(TreeNodeCollection nodes, Int32 IdParent) in c:\inetpub\wwwroot\advancedtreeview\webform1.aspx.cs:86
   AdvancedTreeView.WebForm1.Page_Load(Object sender, EventArgs e) in c:\inetpub\wwwroot\advancedtreeview\webform1.aspx.cs:50
   System.Web.UI.Control.OnLoad(EventArgs e) +67
   System.Web.UI.Control.LoadRecursive() +35
   System.Web.UI.Page.ProcessRequestMain() +744
Re[3]: Текущее состояние соединения: Closed.
От: IT Россия linq2db.com
Дата: 23.10.05 16:16
Оценка:
Здравствуйте, Vglaz, Вы писали:

V>тоже самое.


Проверь, если у ADO.NET права доступа к SQL серверу.
Хотя там исключение должно быть другим, но всё же.
... << RSDN@Home 1.2.0 alpha rev. 0>>
Если нам не помогут, то мы тоже никого не пощадим.
Re[4]: Текущее состояние соединения: Closed.
От: Vglaz Россия www.i-cube.ru
Дата: 23.10.05 16:20
Оценка:
Здравствуйте, IT, Вы писали:

IT>Здравствуйте, Vglaz, Вы писали:


V>>тоже самое.


IT>Проверь, если у ADO.NET права доступа к SQL серверу.

IT>Хотя там исключение должно быть другим, но всё же.

где эти права проверить?
с Windows-приложением все работает же.

кстати тоже самое и с OleDb. таже ошибка
Re[5]: Текущее состояние соединения: Closed.
От: Vglaz Россия www.i-cube.ru
Дата: 23.10.05 16:27
Оценка:
Добавил такую строку: db.Connection.Open();
            using (DbManager db = new DbManager())
            {
                db.Connection.Open();
                db.SetCommand(@"SELECT * FROM Categories").ExecuteScalar();
            }

после этого выдало такую ошибку:


Сведения об исключении: System.Data.SqlClient.SqlException: Login failed for user 'TOSHIBA\ASPNET'.

как исправить?
Re[5]: Текущее состояние соединения: Closed.
От: IT Россия linq2db.com
Дата: 23.10.05 16:42
Оценка:
Здравствуйте, Vglaz, Вы писали:

V>где эти права проверить?

V>с Windows-приложением все работает же.

Понятное дело работает. Windows приложение работает от твоего имени, а у тебя наверняка админские права. ASP.NET работает от имени ASPNET юзера.

SQL Server Enterprise Manager -> выбираешь сервер -> Security -> Logins -> контекстное меню -> New Login -> Name -> ... -> выбираешь юзера ASPNET -> Add -> OK -> закладка Database Access -> выбираешь Northwind.

Можно ещё поклацать по закладкам, посмотреть что там интересного.

Далее жмёшь OK. Теперь надо задать разрешения для юзера ASPNET для таблиц и спроков.

Databases -> Northwind -> Users -> ASPNET -> контекстное меню -> All Tasks -> Manage Permissions -> ставишь галки напротив объектов к которым данный юзер имеет доступ -> OK.
... << RSDN@Home 1.2.0 alpha rev. 0>>
Если нам не помогут, то мы тоже никого не пощадим.
Re[6]: Текущее состояние соединения: Closed.
От: IT Россия linq2db.com
Дата: 23.10.05 16:46
Оценка:
Здравствуйте, Vglaz, Вы писали:

V>Добавил такую строку: db.Connection.Open();


Не надо этого делать, DbManager всё сделает сам. Надо настроить пермишены для ASPNET юзера. См. мой предыдущий пост.
... << RSDN@Home 1.2.0 alpha rev. 0>>
Если нам не помогут, то мы тоже никого не пощадим.
Re[7]: Текущее состояние соединения: Closed.
От: Vglaz Россия www.i-cube.ru
Дата: 23.10.05 17:07
Оценка:
к MS SQL подлючился, все Ок.

а вот к базе на Access'e не хочет. пишет что


System.Data.OleDb.OleDbException: Login failed for user 'Admin'.


подсоединяюсь по такой строке:

            DbManager.AddConnectionString(".OleDb",@"Database=D:\\expo.mdb;Provider=SQLOLEDB;User ID=Admin");
Re[8]: Текущее состояние соединения: Closed.
От: IT Россия linq2db.com
Дата: 23.10.05 17:18
Оценка:
Здравствуйте, Vglaz, Вы писали:

V>подсоединяюсь по такой строке:


V>
V>            DbManager.AddConnectionString(".OleDb",@"Database=D:\\expo.mdb;Provider=SQLOLEDB;User ID=Admin");
V>


А так?

DbManager.AddConnectionString(".OleDb", @"Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source=D:\expo.mdb");
... << RSDN@Home 1.2.0 alpha rev. 0>>
Если нам не помогут, то мы тоже никого не пощадим.
Re[9]: Текущее состояние соединения: Closed.
От: Vglaz Россия www.i-cube.ru
Дата: 23.10.05 17:22
Оценка:
Здравствуйте, IT, Вы писали:

IT>Здравствуйте, Vglaz, Вы писали:


V>>подсоединяюсь по такой строке:


V>>
V>>            DbManager.AddConnectionString(".OleDb",@"Database=D:\\expo.mdb;Provider=SQLOLEDB;User ID=Admin");
V>>


IT>А так?


IT>
IT>DbManager.AddConnectionString(".OleDb", @"Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source=D:\expo.mdb");
IT>


прошло!

спасибо.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.