Форум программистов, компьютерный форум, киберфорум
C#: Базы данных, ADO.NET
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
102 / 102 / 40
Регистрация: 24.01.2014
Сообщений: 1,242
1

При повторной попытке подключиться к базе сообщается, что файл уже занят

07.04.2015, 14:25. Показов 693. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
добрый день, я подключаю базу данных к проекту, получаю данные из базы, заношу их в DataSet, закрываю соединение с базой. При повторной попытке подключиться к базе мне пишет, мол файл уже занят ... подскажите, как фиксануть ?
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
class LocalSql : Connect {
        private SqlConnection conn;
        public LocalSql(string connString, ArrayList adapters, ArrayList dataSets)
        {
            allAdapters = adapters;
            allDataSets = dataSets;
            tableNames = new List<string>();
            sql = new StringBuilder(@"SELECT * FROM sysobjects WHERE xtype='U'");
            conn = new SqlConnection(connString);
        }
        public override void toConnect() {
            conn.Open();
            SqlCommand command = new SqlCommand(sql.ToString(), conn);
            SqlDataReader reader = command.ExecuteReader();
            sql.Clear();
            while (reader.Read()) {
                sql.Append("Select * From [" + reader.GetString(0) + "];");
                tableNames.Add(reader.GetString(0));
            }
            reader.Close();
            processRequest();
            conn.Close();
        }
 
        public override void processRequest()
        {
            foreach (string t in tableNames)
            {
                allAdapters.Add(new SqlDataAdapter(@"Select * From " + t, conn));
                SqlCommandBuilder builder = new SqlCommandBuilder((SqlDataAdapter) allAdapters[allAdapters.Count - 1]);
                DataSet bufDataSet = new DataSet();
                ((SqlDataAdapter)allAdapters[allAdapters.Count - 1]).Fill(bufDataSet);
                bufDataSet.Tables[0].TableName = t;
                allDataSets.Add(bufDataSet);
            }
        }
    }
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.04.2015, 14:25
Ответы с готовыми решениями:

Работа с MySQL. При попытке зашифровать данные сообщается, что файл не найден
Всем привет, хотел бы услышать возможный ответ на проблему Есть программка весит 400кб использует...

При попытке открыть форму в конструкторе, сообщается, что не найден setting.xml
Есть проект, он работает(перестраивается и запускается, согласно последним обновления логики), НО...

При попытке переустановки ОС сообщается, что установка не может быть продолжена из-за отсутствия дисковода
Здравствуйте. Такая проблема: Есть нетбук он без дисковода,я сделал загрузочную флешку... Всё...

Определить, что файл уже занят процессом
Всем привет. Стоит задача проверить, занят ли файл другим процессом, прежде чем начать с этим...

9
1449 / 1121 / 347
Регистрация: 11.04.2011
Сообщений: 2,621
08.04.2015, 04:19 2
Цитата Сообщение от Fene4ka_ Посмотреть сообщение
как фиксануть ?
Цитата Сообщение от Fene4ka_ Посмотреть сообщение
conn.CloseDispose();
Ну а вообще в C# принято using использовать. Почитайте здесь про управление памятью для неуправляемых ресурсов.
1
102 / 102 / 40
Регистрация: 24.01.2014
Сообщений: 1,242
08.04.2015, 18:08  [ТС] 3
Цитата Сообщение от kodv Посмотреть сообщение
conn.Dispose();
не помогло
0
1449 / 1121 / 347
Регистрация: 11.04.2011
Сообщений: 2,621
09.04.2015, 04:00 4
Цитата Сообщение от Fene4ka_ Посмотреть сообщение
не помогло
В таком случае подробнее. В какой строке возникает ошибка и каким способом вы подключаетесь к базе данных.
0
102 / 102 / 40
Регистрация: 24.01.2014
Сообщений: 1,242
09.04.2015, 13:46  [ТС] 5
Цитата Сообщение от kodv Посмотреть сообщение
В какой строке возникает ошибка и каким способом вы подключаетесь к базе данных.
там не то, чтобы ошибка, нет, программа не крашится, тут возможно даже проблема не с доступом к базе, я не знаю точно, возможно тут все дело в самом openFileDialog, с помощью него я выбираю файл базы данных, тем самым формируя путь, затем передаю в метод, который был представлен выше, после этого я хочу заного подключиться к этой же базе и проделываю теже самые действия, но в этот раз мне пишет, что мол файл используется
0
1449 / 1121 / 347
Регистрация: 11.04.2011
Сообщений: 2,621
09.04.2015, 14:57 6
Fene4ka_, SQL Server - это серверная СУБД. Она не особо ориентирована на работу с файлами БД. Боюсь соврать, но, по-моему, при подключении к файлу БД, этот файл монтируется на сервер, после чего осуществляется подключение к серверу, а не к файлу БД напрямую. Как потом этот файл размонтируется, я не знаю. Но, видимо, это происходит не сразу после исчезновения подключения, вызвавшего его монтирование. Я даже и не знаю, что вам в этой ситуации посоветовать, кроме как не пытаться использовать MS SQL Server, как локальную БД.
PS: метод toConnect же вызывается до того, как вы пытаетесь создать второе подключение? Если вы просто заменили Close на Dispose, то у вас без проблем может возникнуть ситуация, когда перед новым new не был вызван метод Dispose для старого соединения ...
0
102 / 102 / 40
Регистрация: 24.01.2014
Сообщений: 1,242
09.04.2015, 15:47  [ТС] 7
Цитата Сообщение от kodv Посмотреть сообщение
о у вас без проблем может возникнуть ситуация, когда перед новым new не был вызван метод Dispose для старого соединения ...
как она может возникнуть если возможность создать новое подключение появляется только после полного завершения метода toConnect ?

Добавлено через 52 секунды
Цитата Сообщение от kodv Посмотреть сообщение
не пытаться использовать MS SQL Server, как локальную БД.
я бы и не использовал бы, но программа ориентирована на людей, которые возможно захотят использовать
0
1449 / 1121 / 347
Регистрация: 11.04.2011
Сообщений: 2,621
09.04.2015, 16:10 8
Fene4ka_, Ваш класс LocalSql спроецирован так, что нет гарантии вызова toConnect. Я не отрицаю,что этот метод в итоге вызывается, поэтому написал это в постскриптуме. Но это неправильно. Объект должен корректно создаваться и удаляться в независимости от вызываемых методов.
0
102 / 102 / 40
Регистрация: 24.01.2014
Сообщений: 1,242
09.04.2015, 16:23  [ТС] 9
Цитата Сообщение от kodv Посмотреть сообщение
Объект должен корректно создаваться и удаляться в независимости от вызываемых методов.
т.е. было бы правильным, если бы toConnect был конструктором ?
0
1449 / 1121 / 347
Регистрация: 11.04.2011
Сообщений: 2,621
09.04.2015, 16:40 10
Fene4ka_, я не знаю, как ваш класс используется, поэтому не могу сказать, куда запихать toConnect, но в этом классе я бы реализовал интерфейс IDisposable со всему вытекающими. По крайней мере, есть такие рекомендации - если внутри класса есть объекты IDisposable, то и сам класс должен быть IDisposable. SqlConnection интерфейс IDisposable реализует. Но это к теме топика мало отношения имеет.
0
09.04.2015, 16:40
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.04.2015, 16:40
Помогаю со студенческими работами здесь

Вылетает при попытке подключиться к базе данных
package com.calendar.calendarr; import android.content.ContentValues; import...

Файл занят используется другим процессом при попытке его удаления
Помогите пожалуйста, знаю, уже было кучу раз, но ничего из уже предложенного не помогает. ...

Ошибка "Файл базы данных занят" при попытке подключения к ней
работаю с бд через шарп . C:\Temp\Паспорт.fdb&quot; в этой директории потом папку темп перекидываю на...

Программы самоудаляются. Но при попытке установить их пишет, что уже установлена
Проблема такая, программы самоудаляются. Но при попытке установить их пишет, что уже установлена....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru