Форум программистов, компьютерный форум, киберфорум
C#: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/18: Рейтинг темы: голосов - 18, средняя оценка - 4.89
3 / 3 / 3
Регистрация: 29.02.2016
Сообщений: 175
SQLite

Как исправить: "Additional information: database is locked database is locked"?

24.01.2018, 13:50. Показов 3642. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день!!! Помогите исправить ошибку при заполнении базы данных!
Имеется три формы! на одной форме идет вывод из базы данных на элемент dataGridView1, есть кнопка Режим разработчика нажимаем на нее выходит вторая форма ввода логина и пароль вводим Admin Admin попадаем на третью форму, для заполнения базы данных при попытки её заполнить вылазиет ошибка "Additional information: database is locked database is locked" как исправить???
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
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.SQLite;
 
namespace WindowsFormsApplication9
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        SQLiteConnection CN;
 
        private void button1_Click(object sender, EventArgs e)
        {
            SQLiteCommand COM = CN.CreateCommand();
 
            COM.CommandText = "select * from Компоненты where (Процессоры=@proizd) and (Частота=@chastituk) AND  ([Количество ядер]=@yadern) and (Стоимость>@st1)  and (Стоимость<@st2)";
            COM.Parameters.Add("@proizd", System.Data.DbType.String).Value = Convert.ToString(proizvoditel.Text);
            COM.Parameters.Add("@chastituk", System.Data.DbType.Double).Value = Convert.ToDouble(chastota.Text);
            COM.Parameters.Add("@yadern", System.Data.DbType.Double).Value = Convert.ToDouble(yadta.Text);
            COM.Parameters.Add("@st1", System.Data.DbType.Double).Value = Convert.ToDouble(textBox1.Text);
            COM.Parameters.Add("@st2", System.Data.DbType.Double).Value = Convert.ToDouble(textBox2.Text);
           SQLiteDataReader SQL = COM.ExecuteReader();
          if(SQL.HasRows)
            {
                while(SQL.Read())
                {
                  
 
                    dataGridView1.Rows.Add(SQL["Процессоры"], SQL["Частота"], SQL["Стоимость"], SQL["Модель"], SQL["Количество ядер"]);
                    
              
                }
 
               
            }
 
          
 
 
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
            CN = new SQLiteConnection("Data Source=PC.db"); // Подключаемся 
            CN.Open();
           
 
            
 
         
            
        }
 
     
 
        private void button2_Click(object sender, EventArgs e)
        {
           
            
        }
 
        private void Form1_FormClosed(object sender, FormClosedEventArgs e)
        {
            CN.Close();
        }
 
        private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
 
        }
 
        private void dataGridView1_CellContentClick_1(object sender, DataGridViewCellEventArgs e)
        {
 
        }
 
        private void button3_Click(object sender, EventArgs e)
        {
            Form3 obj = new Form3();
            obj.ShowDialog();
 
        
         
        }
    }
}
Форма заполнения базы данных
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
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.SQLite;
 
namespace WindowsFormsApplication9
{
    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }
        SQLiteConnection CN;
 
        private void button1_Click(object sender, EventArgs e)
        {
            zapolnenieprocess();
        }
        public void zapolnenieprocess()
        {
            SQLiteCommand COM = CN.CreateCommand();
            COM.CommandText = "insert into Компоненты(Процессоры,Частота,Стоимость,Модель,[Количество ядер]) values(@proiz,@chast,@cena,@model,@yadra)";
            COM.Parameters.Add("@proiz", System.Data.DbType.String).Value = Convert.ToString(proizvoditel.Text);
            COM.Parameters.Add("@chast", System.Data.DbType.Double).Value = Convert.ToDouble(chastota.Text);
            COM.Parameters.Add("@cena", System.Data.DbType.Double).Value = Convert.ToDouble(Cena.Text);
            COM.Parameters.Add("@model", System.Data.DbType.String).Value = Convert.ToString(model.Text);
            COM.Parameters.Add("@yadra", System.Data.DbType.Int16).Value = Convert.ToInt16(yadta.Text);
            COM.ExecuteNonQuery();
        }
 
        private void Form2_Load(object sender, EventArgs e)
        {
            CN = new SQLiteConnection("Data Source=PC.db"); // Подключаемся 
            CN.Open();
        }
 
        private void Form2_FormClosed(object sender, FormClosedEventArgs e)
        {
            CN.Close();
        }
 
        private void button2_Click(object sender, EventArgs e)
        {
           // SQLiteCommand SQ = CN.CreateCommand();
          //  SQ.CommandText = "delete from Пароль";
          //  SQ.ExecuteNonQuery();
        }
    }
}
Форма ввода логина и пароля
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
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.SQLite;
 
namespace WindowsFormsApplication9
{
    public partial class Form3 : Form
    {
        public Form3()
        {
            InitializeComponent();
        }
 
        SQLiteConnection CN;
 
        private void button1_Click(object sender, EventArgs e)
        {
            SQLiteCommand COM1 = CN.CreateCommand();
            COM1.CommandText = "select [Имя пользователя],Пароль from Пароль";
 
            SQLiteDataReader SQL = COM1.ExecuteReader();
            if (SQL.Read())
            {
 
 
                if (((Login.Text == Convert.ToString(SQL["Имя пользователя"]))) && (password.Text == Convert.ToString(SQL["Пароль"])))
                {
                    Form2 f1 = new Form2();
                    f1.ShowDialog();
                }
                else
                {
                    MessageBox.Show("Не верный пароль попробуйте еще раз!");
                }
            }
        }
 
        private void Form3_Load(object sender, EventArgs e)
        {
            CN = new SQLiteConnection("Data Source=PC.db"); // Подключаемся 
            CN.Open();
        }
    }
}
Миниатюры
Как исправить: "Additional information: database is locked  database is locked"?   Как исправить: "Additional information: database is locked  database is locked"?   Как исправить: "Additional information: database is locked  database is locked"?  

Как исправить: "Additional information: database is locked  database is locked"?  
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
24.01.2018, 13:50
Ответы с готовыми решениями:

Database is locked
Здравствуйте, при попытке закрыть форму возникает &quot;database is locked&quot; в меню - выход, при нажатии на крестик все нормально, в чем дело...

Database is locked
public bool DBConnectionEdit(string userName, string phonesUser, string emailUser, string aboutMeUser, string birthdayUser, string...

Странное поведение sqlite - database is locked в 50% случаев
Выполняется обычный запрос: &quot;UPDATE results SET isReaded = @isread WHERE id = @id;&quot;. Когда я просто хочу это сделать, вылетает database is...

14
3 / 3 / 3
Регистрация: 29.02.2016
Сообщений: 175
24.01.2018, 13:56  [ТС]
Сама прога
Вложения
Тип файла: rar Архив WinRAR.rar (15.93 Мб, 4 просмотров)
0
785 / 616 / 273
Регистрация: 04.08.2015
Сообщений: 1,713
24.01.2018, 14:19
spaces_dima, при использовании DataReader нужно обязательно закрывать соединение. Используйте using
C#
1
2
3
4
5
using (SQLiteConnection c = new SQLiteConnection(ConnectionString))
{
    c.Open();
    ...
}
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18273 / 14196 / 5368
Регистрация: 17.03.2014
Сообщений: 28,881
Записей в блоге: 1
24.01.2018, 14:21
Лучший ответ Сообщение было отмечено spaces_dima как решение

Решение

spaces_dima, попробуй вот такую форму авторизации
Кликните здесь для просмотра всего текста
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
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.SQLite;
 
namespace WindowsFormsApplication9
{
    public partial class Form3 : Form
    {
        public Form3()
        {
            InitializeComponent();
        }
 
        private static bool CheckLoginAndPassword(string login, string password)
        {
            bool valid = false;
            if (!string.IsNullOrEmpty(login) && !string.IsNullOrEmpty(password))
            {
                using (var CN = new SQLiteConnection("Data Source=PC.db"))
                {
                    SQLiteCommand COM1 = CN.CreateCommand();
                    COM1.CommandText = "select 1 from Пароль WHERE [Имя пользователя]=@login AND Пароль=@password";
                    COM1.Parameters.Add(new SQLiteParameter("@login", login));
                    COM1.Parameters.Add(new SQLiteParameter("@password", password));
                    CN.Open();
                    using (SQLiteDataReader SQL = COM1.ExecuteReader())
                    {
                        valid = SQL.Read();
                    }
                }
            }
            return valid;
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            if (CheckLoginAndPassword(Login.Text, password.Text))
            {
                    Form2 f1 = new Form2();
                    f1.ShowDialog();
            }
            else
            {
                MessageBox.Show("Не верный пароль попробуйте еще раз!");
            }
        }
 
        private void Form3_Load(object sender, EventArgs e)
        {
        }
    }
}

Ключевой момент что соединение точно закрывается перед открытием новой формы. Советую переделать остальные формы по такому же принципу.
1
3 / 3 / 3
Регистрация: 29.02.2016
Сообщений: 175
24.01.2018, 14:57  [ТС]
То есть ??
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
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.SQLite;
 
namespace WindowsFormsApplication9
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        
 
        private void button1_Click(object sender, EventArgs e)
        {
            
 
            using(SQLiteConnection CN = new SQLiteConnection("Data Source=PC.db"))
            {
                
                CN.Open();
                SQLiteCommand COM = CN.CreateCommand();
                COM.CommandText = "select * from Компоненты where (Процессоры=@proizd) and (Частота=@chastituk) AND  ([Количество ядер]=@yadern) and (Стоимость>@st1)  and (Стоимость<@st2)";
                COM.Parameters.Add("@proizd", System.Data.DbType.String).Value = Convert.ToString(proizvoditel.Text);
                COM.Parameters.Add("@chastituk", System.Data.DbType.Double).Value = Convert.ToDouble(chastota.Text);
                COM.Parameters.Add("@yadern", System.Data.DbType.Double).Value = Convert.ToDouble(yadta.Text);
                COM.Parameters.Add("@st1", System.Data.DbType.Double).Value = Convert.ToDouble(textBox1.Text);
                COM.Parameters.Add("@st2", System.Data.DbType.Double).Value = Convert.ToDouble(textBox2.Text);
                using(SQLiteDataReader SQL = COM.ExecuteReader())
                {
                    if (SQL.HasRows)
                    {
                        while (SQL.Read())
                        {
 
 
                            dataGridView1.Rows.Add(SQL["Процессоры"], SQL["Частота"], SQL["Стоимость"], SQL["Модель"], SQL["Количество ядер"]);
                            
 
                        }
 
 
                    }
                }
                
            }
            
         
 
         
        
 
          
 
 
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
           
           
 
            
 
         
            
        }
 
     
 
        private void button2_Click(object sender, EventArgs e)
        {
           
            
        }
 
        private void Form1_FormClosed(object sender, FormClosedEventArgs e)
        {
            using (SQLiteConnection CN = new SQLiteConnection("Data Source=PC.db"))
            {
                CN.Close();
            }
        }
 
        private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
 
        }
 
        private void dataGridView1_CellContentClick_1(object sender, DataGridViewCellEventArgs e)
        {
 
        }
 
        private void button3_Click(object sender, EventArgs e)
        {
            Form3 obj = new Form3();
            obj.ShowDialog();
 
        
         
        }
    }
}
переделать по такому принципу, но та же самая ошибка
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18273 / 14196 / 5368
Регистрация: 17.03.2014
Сообщений: 28,881
Записей в блоге: 1
24.01.2018, 16:10
spaces_dima, в моем коде были ошибки - я их исправил в посте выше. Также проверил что замена Form3 на мой код исправляет ошибку "database locked".
0
3 / 3 / 3
Регистрация: 29.02.2016
Сообщений: 175
26.01.2018, 21:05  [ТС]
Большое спасибо разобрался

Добавлено через 1 час 6 минут
А можно еще вопрос?? А есть еще другие варианты решения этой проблемы ?? Это что же получается всегда придется создавать такие
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
private static bool CheckLoginAndPassword(string login, string password)
        {
            bool valid = false;
            if (!string.IsNullOrEmpty(login) && !string.IsNullOrEmpty(password))
            {
                using (var CN = new SQLiteConnection("Data Source=PC.db"))
                {
                    SQLiteCommand COM1 = CN.CreateCommand();
                    COM1.CommandText = "select 1 from Пароль WHERE [Имя пользователя]=@login AND Пароль=@password";
                    COM1.Parameters.Add(new SQLiteParameter("@login", login));
                    COM1.Parameters.Add(new SQLiteParameter("@password", password));
                    CN.Open();
                    using (SQLiteDataReader SQL = COM1.ExecuteReader())
                    {
                        valid = SQL.Read();
                    }
                }
            }
            return valid;
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            if (CheckLoginAndPassword(Login.Text, password.Text))
            {
                    Form2 f1 = new Form2();
                    f1.ShowDialog();
            }
            else
            {
                MessageBox.Show("Не верный пароль попробуйте еще раз!");
            }
        }
методы чтобы решить подобную проблему или есть варианты проще???
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18273 / 14196 / 5368
Регистрация: 17.03.2014
Сообщений: 28,881
Записей в блоге: 1
26.01.2018, 23:50
spaces_dima, варианты есть всегда. Например можно создать класс с методами упрощающими работу с SQLite.
0
3 / 3 / 3
Регистрация: 29.02.2016
Сообщений: 175
27.01.2018, 09:14  [ТС]
Если использовать метод close() для закрытия соединения?? Он работает или нет?
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18273 / 14196 / 5368
Регистрация: 17.03.2014
Сообщений: 28,881
Записей в блоге: 1
27.01.2018, 12:04
spaces_dima, работает
0
3 / 3 / 3
Регистрация: 29.02.2016
Сообщений: 175
27.01.2018, 12:14  [ТС]
Почему так не работает??
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
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.SQLite;
 
namespace WindowsFormsApplication9
{
    public partial class Form3 : Form
    {
        public Form3()
        {
            InitializeComponent();
        }
 
       
        
 
      
 
        private  void button1_Click(object sender, EventArgs e)
        {
            using (SQLiteConnection CN = new SQLiteConnection("Data Source=PC.db")) // Подключаемся 
            {
 
 
                CN.Open();
                SQLiteCommand COM1 = CN.CreateCommand();
                COM1.CommandText = "select [Имя пользователя],Пароль from Пароль";
                using (SQLiteDataReader SQL = COM1.ExecuteReader())
                {
 
                    if (SQL.Read())
                    {
 
 
                        if (((Login.Text == Convert.ToString(SQL["Имя пользователя"]))) && (password.Text == Convert.ToString(SQL["Пароль"])))
                        {
                            Form2 f1 = new Form2();
                            f1.ShowDialog();
                            SQL.Close(); // Закрыть ридер 
 
 
 
                        }
                        else
                        {
                            MessageBox.Show("Не верный пароль попробуйте еще раз!");
                        }
 
                    }
                    SQL.Close(); // Закрыть соединение  по идеи должно закрыть соединение 
                }
 
              
               
            }
            
        }
 
        private void Form3_Load(object sender, EventArgs e)
        {
            
        }
    }
}
Я ведь закрыл соединение, и закрыл SQLiteDataReader(правда не уверен что надо закрывать SQLiteDataReader)
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18273 / 14196 / 5368
Регистрация: 17.03.2014
Сообщений: 28,881
Записей в блоге: 1
27.01.2018, 12:15
spaces_dima, соединение и datareader нужно закрывать ДО открытия диалога.
0
3 / 3 / 3
Регистрация: 29.02.2016
Сообщений: 175
27.01.2018, 12:40  [ТС]
Можете показать где именно ошибка?в моем коде
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18273 / 14196 / 5368
Регистрация: 17.03.2014
Сообщений: 28,881
Записей в блоге: 1
27.01.2018, 13:19
spaces_dima, ошибка в том что Close вызывается после f1.ShowDialog();. Данный метод не вернет управление пока открыта форма и значит соединение и datareader остаются открытыми. Сравни свой код с моим из сообщения #4.
1
3 / 3 / 3
Регистрация: 29.02.2016
Сообщений: 175
27.01.2018, 13:28  [ТС]
Вообщем разобрался!!! Спасибо большое!!! Вы лучший!!!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
27.01.2018, 13:28
Помогаю со студенческими работами здесь

При попытке удаления записи появляется Database is locked
При попытке удаления записи из datagrid через крестик появляется ошибка &quot;database os locked&quot; не могу понять в чём...

Не проходят запросы к sqlite, ошибка: The database file is locked (database is locked)
Столкнулся с проблемой, и не понимаю из-за чего... Дело в том, что к одной таблице не проходят запрос на обновление и удаление, хотя к...

Без причины ошибка The database file is locked (database is locked)
В общем, создал бота для телеграма. Использую один, естественно, статический объект Connection для доступа к БД. При необходимости...

Sqlite The database file is locked database is locked
Добрый вечер. Появилась ошибка о том, что база заблокирована. Делаю я так db_login.cs private db_controller _dbctrl = new...

Sqlite и database is locked
Всем доброго времени суток, вот столкнулся с проблемой - база sqlite выбрасывает database is locked error (Она занята другим процессом)....


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru