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

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

07.04.2015, 14:25. Показов 708. Ответов 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
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
07.04.2015, 14:25
Ответы с готовыми решениями:

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

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

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

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

9
 Аватар для kodv
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
 Аватар для kodv
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
 Аватар для kodv
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
 Аватар для kodv
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
 Аватар для kodv
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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
09.04.2015, 16:40
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Как обучить нейросеть создания картинок на Python
bytestream 24.01.2025
В эпоху цифровых технологий искусственный интеллект становится неотъемлемой частью творческого процесса. Особое место в этой области занимает разработка и обучение нейронных сетей для создания. . .
Как обучить нейросеть генерации текста на Python
bytestream 24.01.2025
В современном мире искусственный интеллект и машинное обучение становятся неотъемлемой частью многих технологических решений. Одной из наиболее интересных и востребованных задач в этой области. . .
Машинное обучение на Python
bytestream 24.01.2025
Введение в машинное обучение на Python Машинное обучение представляет собой одну из наиболее динамично развивающихся областей информационных технологий, которая позволяет компьютерным системам. . .
Как удалить вирус-майнер с компьютера
hw_wired 24.01.2025
Вирусы-майнеры стали одной из наиболее серьезных угроз для пользователей компьютеров. Эти вредоносные программы тайно используют вычислительные ресурсы зараженного устройства для добычи криптовалюты. . .
Что такое веб-сервер, для чего он нужен и как работает
bytestream 24.01.2025
В современную эпоху цифровых технологий веб-сервер является фундаментальным компонентом интернет-инфраструктуры, обеспечивающим функционирование множества онлайн-сервисов и веб-сайтов. Этот. . .
Как в цикле for перебрать все элементы в словаре в Python
bytestream 24.01.2025
Словари в Python представляют собой мощные структуры данных, которые позволяют хранить информацию в формате ключ-значение. Эта особенность делает их незаменимыми при работе с данными, где требуется. . .
Как отменить rebase в Git
hw_wired 24.01.2025
Git rebase представляет собой мощный инструмент для управления историей коммитов в системе контроля версий Git. Этот механизм позволяет разработчикам изменять последовательность, комбинировать или. . .
Как поменять цвет input placeholder с помощью CSS
bytestream 24.01.2025
В веб-разработке оформление элементов пользовательского интерфейса играет ключевую роль в создании привлекательного и интуитивно понятного дизайна. Особое внимание уделяется формам ввода данных, где. . .
Как перебрать все значения в перечислении (enum) в C#
bytestream 24.01.2025
Перечисление (enum) в языке программирования C# представляет собой специальный тип данных, который позволяет определить набор именованных констант. Этот мощный инструмент особенно полезен, когда. . .
Как обойтись без проверки на null, чтобы избежать NullPointerExce­ption в Java
bytestream 24.01.2025
NullPointerException (NPE) является одним из самых распространенных исключений в Java, создающих серьезные проблемы при разработке программного обеспечения. Данное исключение возникает при попытке. . .
Что лучше использовать в href ссылок в JavaScript: "#" или "javascript:voi­­d(0)­"
bytestream 24.01.2025
При разработке веб-приложений важную роль играет правильное использование HTML-ссылок в сочетании с JavaScript. Одним из ключевых аспектов является выбор корректного значения атрибута href для. . .
Как узнать индекс элемента списка по его значению в Python
hw_wired 24.01.2025
При работе с коллекциями данных в Python часто возникает необходимость не только манипулировать элементами списка, но и определять их точное местоположение. Индекс элемента представляет собой. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru