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

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

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

Author24 — интернет-сервис помощи студентам
Добрый день! Вопрос может быть и глупый, но все же! Ниже приведен код для открытия файла *.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,...

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

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

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

9
Почетный модератор
Эксперт .NET
8722 / 3674 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
22.10.2010, 20:50 2
В БД не силён, но что-то мне подсказывает что Вы не закрыли подключение к базе, из-за этого и предупреждение.
0
4 / 4 / 1
Регистрация: 12.10.2010
Сообщений: 32
22.10.2010, 23:45  [ТС] 3
Цитата Сообщение от SSTREGG Посмотреть сообщение
В БД не силён, но что-то мне подсказывает что Вы не закрыли подключение к базе, из-за этого и предупреждение.
В том то вся и проблема, что я тоже так сначала думал! Даже добалял блоки кода вида:
C#
1
2
3
4
if (connection.State==ConnectionState.Open)
{
connection.Close();
}
Не помогает.
Я подозреваю что что-то происходит не то с контролом OpenDialogFile. Просто видел много примеров, где данные через OpenDialogFile заносят в поток и там с ними работают. А с потоками к сожалению не приходилось работать. Я так сказать все это еще осваиваю. Вот поэтому я и подозреваю, что контрол OpenDialogFile не так прост, как кажется на первый взгляд. И что скорее всего работать с ним так просто, как я этого захотел, не получится. Хотя, если кто видит ошибку, подскажите!
0
2096 / 1261 / 171
Регистрация: 01.02.2009
Сообщений: 2,842
23.10.2010, 00:02 4
Когда необходимо использовать 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  [ТС] 5
Спасибо!Завтра на свежую голову попробую
0
24 / 4 / 2
Регистрация: 03.09.2009
Сообщений: 73
23.10.2010, 04:14 6
Сколько не курил твой код, так и не увидел, где ты открываешь и закрываешь файл, на который ругается твоя ошибка...
даже поиск браузера не помог мне найти ключевое слово basa.mdf

Будь добр укажи эти методы...
а создание потоков для чтения файлов только добавит тебе геморроя с открытыми ресурсами... хотя через поток открывать правильнее особенно если базы большие( но правильнее для того, чтобы программа не подвисала до конца чтения данных из файла, и только для этого! а сама программа становится немного медленнее из-за использования потоков, хотя в малых дозах это не видно)
0
4 / 4 / 1
Регистрация: 12.10.2010
Сообщений: 32
23.10.2010, 11:52  [ТС] 7
Цитата Сообщение от 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 8
Когда работаешь с ODBC - подобных проблем не наблюдается. Т. е. нужно использовать OdbcConnection, OdbcCommand и т. д.
0
4 / 4 / 1
Регистрация: 12.10.2010
Сообщений: 32
23.10.2010, 15:09  [ТС] 9
Цитата Сообщение от 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  [ТС] 10
Пардон, погорячился)

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

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

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Книги и учебные ресурсы по C#
InfoMaster 08.01.2025
Базовые учебники и руководства Одной из лучших книг для начинающих является "C# 10 и . NET 6 для начинающих" Эндрю Троелсена и Филиппа Джепикса . Книга последовательно раскрывает основные концепции. . .
Что такое NullReferenceEx­­­ception и как исправить?
InfoMaster 08.01.2025
NullReferenceException - одно из самых распространенных исключений, с которым сталкиваются разработчики на C#. Это исключение возникает при попытке обратиться к членам объекта (методам, свойствам или. . .
Что такое Null Pointer Exception (NPE) и как это исправить?
InfoMaster 08.01.2025
Null Pointer Exception (NPE) - это одно из самых распространенных исключений в Java, которое возникает при попытке использовать ссылку на объект, значение которой равно null. Это исключение относится. . .
Русский язык в консоли C++
InfoMaster 08.01.2025
При разработке программ на C++ одной из частых проблем, с которой сталкиваются русскоязычные программисты, является корректное отображение кириллицы в консольных приложениях. Эта проблема особенно. . .
Telegram бот на C#
InfoMaster 08.01.2025
Разработка ботов для Telegram стала неотъемлемой частью современной экосистемы мессенджеров. C# предоставляет мощный и удобный инструментарий для создания разнообразных ботов, от простых. . .
Использование GraphQL в Go (Golang)
InfoMaster 08.01.2025
Go (Golang) является одним из наиболее популярных языков программирования, используемых для создания высокопроизводительных серверных приложений. Его архитектурные особенности и встроенные. . .
Что лучше использовать при создании класса в Java: сеттеры или конструктор?
Alexander-7 08.01.2025
Вопрос подробнее: На вопрос: «Когда одновременно создаются конструктор и сеттеры в классе – это нормально?» куратор уточнил: «Ваш класс может вообще не иметь сеттеров, а только конструктор и геттеры. . .
Как работать с GraphQL на TypeScript
InfoMaster 08.01.2025
Введение в GraphQL и TypeScript В современной разработке веб-приложений GraphQL стал мощным инструментом для создания гибких и эффективных API. В сочетании с TypeScript, эта технология. . .
Счётчик на базе сумматоров + регистров и генератора сигналов согласования.
Hrethgir 07.01.2025
Создан с целью проверки скорости асинхронной логики: ранее описанного сумматора и предополагаемых fast регистров. Регистры созданы на базе ранее описанного, предполагаемого fast триггера. То-есть. . .
Как перейти с Options API на Composition API в Vue.js
BasicMan 06.01.2025
Почему переход на Composition API актуален В мире современной веб-разработки фреймворк Vue. js продолжает эволюционировать, предлагая разработчикам все более совершенные инструменты для создания. . .
Архитектура современных процессоров
inter-admin 06.01.2025
Процессор (центральный процессор, ЦП) является основным вычислительным устройством компьютера, которое выполняет обработку данных и управляет работой всех остальных компонентов системы. Архитектура. . .
История создания реляционной модели баз данных, правила Кодда
Programming 06.01.2025
Предпосылки создания реляционной модели В конце 1960-х годов компьютерная индустрия столкнулась с серьезными проблемами в области управления данными. Существовавшие на тот момент модели данных -. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru