Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/64: Рейтинг темы: голосов - 64, средняя оценка - 4.91
4 / 4 / 1
Регистрация: 12.10.2010
Сообщений: 32

Этот файл сейчас используется.Укажите другое....

22.10.2010, 19:33. Показов 14104. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день! Вопрос может быть и глупый, но все же! Ниже приведен код для открытия файла *.mdf на моей форме.Для поиска и открытия файла я использую OpenFileDialog. Предположим, я открываю файл с именем Base.mdf, посмотрел на него, что-то может даже изменил в нем и закрыл(на то имеется своя кнопочка). И если я открываю его вновь, не закрывая приложение, то у меня выскакивает ошибка вида:

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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
private void OpenDbDialog_FileOk(object sender, CancelEventArgs e)
        {
            Grid.Columns.Clear();
 
            ////////////////////////////////////////////////////////////////////////////////
            // Формируем названия столбцов
 
            connection.ConnectionString = @"Data Source=.\;AttachDbFilename=" + OpenDbDialog.FileName.ToString() + ";Integrated Security=True;Connect Timeout=30;User Instance=True";
            ConnClass.ConnString= connection.ConnectionString;
            connection.Open();
            string Str1 = "SELECT * FROM Person";
            using (SqlCommand cmd = new SqlCommand(Str1, connection))
            {
                SqlDataReader reader;
                reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
                Grid.Columns.Add(reader.GetName(0).ToString(), "Идентификатор");
                Grid.Columns.Add(reader.GetName(1).ToString(), "Фамилия");
                Grid.Columns.Add(reader.GetName(2).ToString(), "Имя");
                Grid.Columns.Add(reader.GetName(3).ToString(), "Отчество");
                Grid.Columns.Add(new DataGridViewComboBoxColumn());
                Grid.Columns.Add(new DataGridViewComboBoxColumn());
                Grid.Columns[4].Name = "Адреса";
                Grid.Columns[5].Name = "Телефоны";
                reader.Close();
            }
 
            /////////////////////////////////////////////////////////////////////////////////
            // Находим все уникальные id_person и заносим в массив
 
            ArrayList Id_p = new ArrayList();
            string SqlStr = "SELECT id_person FROM Person";
            connection.Open();
            using (SqlCommand cmd = new SqlCommand(SqlStr, connection))
            {
                SqlDataReader reader;
                reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
                while (reader.Read())
                {
                    Id_p.Add(reader.GetValue(0).ToString().Trim());
                }
                reader.Close();
            }
            connection.Close();
 
            //////////////////////////////////////////////////////////////////////////////////
            // Находим все данные из таблицы Person, проходя циклом по всем уникальным id_person
            // и заносим в датагрид
 
            for (int i = 0; i < Id_p.Count; i++)
            {
                connection.Open();
                string Str = "SELECT * FROM Person WHERE (id_person = N'" + Id_p[i] + "')";
                using (SqlCommand command = new SqlCommand(Str, connection))
                {
                    SqlDataReader datareader;
                    datareader = command.ExecuteReader(CommandBehavior.CloseConnection);
                    while (datareader.Read())
                    {
                        string id = datareader.GetValue(0).ToString().Trim();
                        person.FirstNames = datareader.GetValue(1).ToString().Trim();
                        person.SecondNames = datareader.GetValue(2).ToString().Trim();
                        person.LastNames = datareader.GetValue(3).ToString().Trim();
                        string[] row = new string[] { id, person.FirstNames, person.SecondNames, person.LastNames };
                        Grid.Rows.Add(row);
                    }
                    datareader.Close();
                }
                connection.Close();
            }
 
            //////////////////////////////////////////////////////////////////////////////////////
            //Находим номера телефонов и Операторов связи для каждого найденного уникального id_person 
            //прочитанного из массива, созданного ранее.
            //Номера опять же заносим в массив, в котром формируется строка вида <оператор>:<номер>
 
            for (int i = 0; i < Id_p.Count; i++)
            {
                int j = 0;
                ArrayList ArrNumbOper = new ArrayList();
                connection.Open();
                string Str = "SELECT     Phone.Operator, Phone.Number FROM         Person INNER JOIN PersPhone ON Person.id_person = PersPhone.id_person INNER JOIN Phone ON PersPhone.id_phone = Phone.id_phone WHERE     (Person.id_person = N'" + Id_p[i] + "')";
                using (SqlCommand cmd = new SqlCommand(Str, connection))
                {
                    SqlDataReader reader;
                    reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
                    while (reader.Read())
                    {
                        telephone.Operators = reader.GetValue(0).ToString().Trim();
                        telephone.Numbers = reader.GetValue(1).ToString().Trim();
                        person.Phon.Add(telephone);
                        ArrNumbOper.Add(person.Phon[j].Operators + " :" + person.Phon[j].Numbers );
                        j++;
                        DataGridViewRow row = Grid.Rows[i];
                        DataGridViewComboBoxCell cell1 = (DataGridViewComboBoxCell)row.Cells[5];
                        cell1.DataSource = ArrNumbOper;
                        cell1.Value = ArrNumbOper[0];
                    }
                }
                connection.Close();
            }
 
            ////////////////////////////////////////////////////////////////////////////////////////
            // Аналогично делаем для адресов
 
            for (int i = 0; i < Id_p.Count; i++)
            {
                int k = 0;
                ArrayList ArrAdress = new ArrayList();
                connection.Open();
                string Str = "SELECT Adress.City, Adress.Street, Adress.House, Adress.Flat FROM Adress INNER JOIN PersAdress ON Adress.id_adress = PersAdress.id_adress INNER JOIN Person ON PersAdress.id_person = Person.id_person WHERE     (Person.id_person = N'" + Id_p[i] + "')";
                using (SqlCommand cmd = new SqlCommand(Str, connection))
                {
                    SqlDataReader reader;
                    reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
                    while (reader.Read())
                    {
                        adress.Citys = reader.GetValue(0).ToString().Trim();
                        adress.Streets = reader.GetValue(1).ToString().Trim();
                        adress.Houses = reader.GetValue(2).ToString().Trim();
                        adress.Flats = reader.GetValue(3).ToString().Trim();
                        person.Adr.Add(adress);
                        ArrAdress.Add("г." + person.Adr[k].Citys + " ул. " + person.Adr[k].Streets + " д. " + person.Adr[k].Houses + " кв. " + person.Adr[k].Flats);
                        k++;
                        DataGridViewRow row = Grid.Rows[i];
                        DataGridViewComboBoxCell cell = (DataGridViewComboBoxCell)row.Cells[4];
                        cell.DataSource = ArrAdress;
                        cell.Value = ArrAdress[0];
                    }
                    reader.Close();
                }
                connection.Close();
            }
            Grid.AutoResizeRows();
            Grid.AutoResizeColumns();
        }
 
        private void CloseFileMenuItem_Click(object sender, EventArgs e)
        {
            Grid.Columns.Clear();
            if (connection.State==ConnectionState.Open)
            {
                connection.Close();
                OpenDbDialog.Reset();
            }
        }
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
22.10.2010, 19:33
Ответы с готовыми решениями:

Процесс не может получить доступ к файлу, так как этот файл используется другим процессом
Вот такой код using (FileStream sw = new FileStream(fileName, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite)) ...

Процесс не может получить доступ к файлу, так как этот файл используется другим процессом
Моя программа сначала открывает картинку, а потом её удаляет(должна). Вылезает &quot;Процесс не может получить доступ к файлу, так как этот...

Ошибка "этот файл используется" при удалении объектов и XML файлов
Ошибка возникает при удалении объектов и XML файлов. Иногда все срабатывает нормально, а иногда вызывается ошибка (указанная в названии...

9
Почетный модератор
Эксперт .NET
 Аватар для NickoTin
8729 / 3681 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
22.10.2010, 20:50
В БД не силён, но что-то мне подсказывает что Вы не закрыли подключение к базе, из-за этого и предупреждение.
0
4 / 4 / 1
Регистрация: 12.10.2010
Сообщений: 32
22.10.2010, 23:45  [ТС]
Цитата Сообщение от SSTREGG Посмотреть сообщение
В БД не силён, но что-то мне подсказывает что Вы не закрыли подключение к базе, из-за этого и предупреждение.
В том то вся и проблема, что я тоже так сначала думал! Даже добалял блоки кода вида:
C#
1
2
3
4
if (connection.State==ConnectionState.Open)
{
connection.Close();
}
Не помогает.
Я подозреваю что что-то происходит не то с контролом OpenDialogFile. Просто видел много примеров, где данные через OpenDialogFile заносят в поток и там с ними работают. А с потоками к сожалению не приходилось работать. Я так сказать все это еще осваиваю. Вот поэтому я и подозреваю, что контрол OpenDialogFile не так прост, как кажется на первый взгляд. И что скорее всего работать с ним так просто, как я этого захотел, не получится. Хотя, если кто видит ошибку, подскажите!
0
 Аватар для kirill29
2098 / 1263 / 173
Регистрация: 01.02.2009
Сообщений: 2,842
23.10.2010, 00:02
Когда необходимо использовать OpenFileDialog, то пользуюсь следующей конструкцией:
C#
1
2
3
4
5
6
7
8
private void btnLoadImage_Click(object sender, EventArgs e)
        {
            if (openFileDialog.ShowDialog() == DialogResult.OK) 
            {
                string name = openFileDialog.FileName;
                //.........................................
            }
        }
0
4 / 4 / 1
Регистрация: 12.10.2010
Сообщений: 32
23.10.2010, 00:32  [ТС]
Спасибо!Завтра на свежую голову попробую
0
24 / 4 / 2
Регистрация: 03.09.2009
Сообщений: 73
23.10.2010, 04:14
Сколько не курил твой код, так и не увидел, где ты открываешь и закрываешь файл, на который ругается твоя ошибка...
даже поиск браузера не помог мне найти ключевое слово basa.mdf

Будь добр укажи эти методы...
а создание потоков для чтения файлов только добавит тебе геморроя с открытыми ресурсами... хотя через поток открывать правильнее особенно если базы большие( но правильнее для того, чтобы программа не подвисала до конца чтения данных из файла, и только для этого! а сама программа становится немного медленнее из-за использования потоков, хотя в малых дозах это не видно)
0
4 / 4 / 1
Регистрация: 12.10.2010
Сообщений: 32
23.10.2010, 11:52  [ТС]
Цитата Сообщение от newdj Посмотреть сообщение
Сколько не курил твой код, так и не увидел, где ты открываешь и закрываешь файл, на который ругается твоя ошибка...
даже поиск браузера не помог мне найти ключевое слово basa.mdf

Будь добр укажи эти методы...
а создание потоков для чтения файлов только добавит тебе геморроя с открытыми ресурсами... хотя через поток открывать правильнее особенно если базы большие( но правильнее для того, чтобы программа не подвисала до конца чтения данных из файла, и только для этого! а сама программа становится немного медленнее из-за использования потоков, хотя в малых дозах это не видно)
Конкретно методом OpenFile я не пользуюсь. Я использую OpenFileDialog тупо для выбора файла БД, к котрому надо подключиться, т.е. для формирования строки подключения к нему. Я выдергиваю из этого файла сведения о пути к файлу и его имя.Выглядит это так:
C#
1
2
3
4
5
6
7
            connection.ConnectionString = @"Data Source=.\;AttachDbFilename=" + OpenDbDialog.FileName.ToString() + ";Integrated Security=True;Connect Timeout=30;User Instance=True";
            ConnClass.ConnString= connection.ConnectionString;
            connection.Open();
            string Str1 = "SELECT * FROM Person";
            using (SqlCommand cmd = new SqlCommand(Str1, connection))
            {
                SqlDataReader reader;
Добавлено через 1 минуту
Если так нельзя делать, то объясните пожалуйста как надо или киньте ссылку на материал.
0
90 / 89 / 13
Регистрация: 28.09.2010
Сообщений: 262
23.10.2010, 14:10
Когда работаешь с ODBC - подобных проблем не наблюдается. Т. е. нужно использовать OdbcConnection, OdbcCommand и т. д.
0
4 / 4 / 1
Регистрация: 12.10.2010
Сообщений: 32
23.10.2010, 15:09  [ТС]
Цитата Сообщение от planar Посмотреть сообщение
Когда работаешь с ODBC - подобных проблем не наблюдается. Т. е. нужно использовать OdbcConnection, OdbcCommand и т. д.
Так у меня же база SQL Server. По идее надо использовать SqlClient, а не Odbc. Или если я не прав, то как будет выглядеть строка подключения к SQL Server?
Моя выглядит вот так:
C#
1
connect.ConnectionString = @"Data Source=.\;AttachDbFilename=" + name + ";Integrated Security=True;Connect Timeout=30;User Instance=True";
Добавлено через 2 минуты
Может быть имелось ввиду Ole Db? Тогда можно использовать Provider=SQLOLEDB.
0
4 / 4 / 1
Регистрация: 12.10.2010
Сообщений: 32
25.10.2010, 00:12  [ТС]
Пардон, погорячился)

Добавлено через 49 минут
Цитата Сообщение от planar Посмотреть сообщение
Когда работаешь с ODBC - подобных проблем не наблюдается. Т. е. нужно использовать OdbcConnection, OdbcCommand и т. д.
При использовании Odbc у меня программа не работает. Винда ругается на svhost.exe и закрывает мою прогу

Добавлено через 18 минут
Программа заработала и с Odbc, только начальную проблему это не устранило.Опять выскакивает окошко: "этот файл сейчас используется. ..........."

Добавлено через 5 часов 52 минуты
ВСЕ! Ситуация разрешилась! Очистил пул соединений и все стало работать нормально. Получается я соединялся с БД, но при закрытии моего соединения, объект соединения не удалялся, а помещался в пул и SQL Server как бы продолжал его использовать. Но очистив пул, я разорвал все связи.
C#
1
SqlConnection.ClearPool(connection);
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
25.10.2010, 00:12
Помогаю со студенческими работами здесь

Не удалось скопировать файл. Процесс не может получить доступ к файлу, так как этот файл используется другим процессом
Ошибка 1 не удалось скопировать файл &quot;obj\x86\Debug\ConsoleApplication1.exe&quot; в &quot;bin\Debug\ConsoleApplication1.exe&quot;. Процесс не может...

Процесс не может получить доступ к файлу, так как этот файл используется другим процессом
Здравствуйте. У меня есть 2 таймера. 1 таймер каждые 5 секунд скачивает файл с сервера по фтп. А 2 таймер каждые 8 секунд проверяет что...

File.Create(). Процесс не может получить доступ к файлу , так как этот файл используется
Здравствуйте. Выполняю код using System; using System.IO; using System.Text; namespace ConsoleApplication1 { class...

Процесс не может получить доступ к файлу так как этот файл используется другим процессом
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using...

Процесс не может получить доступ к файлу, так как этот файл используется другим процессом
Программа отправляет на сервер сообщение из файла(должна), но выдаёт исключение &quot;Процесс не может получить доступ к файлу, так как...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru