Форум программистов, компьютерный форум, киберфорум
Наши страницы
C#: Базы данных, ADO.NET
Войти
Регистрация
Восстановить пароль
 
ВераВ
0 / 0 / 0
Регистрация: 02.04.2015
Сообщений: 18
1

Ошибка "база данных только для чтения" в установленном приложении

20.05.2016, 14:05. Просмотров 183. Ответов 4
Метки нет (Все метки)

В VS при нажатии на кнопку Запуск, приложение работает без ошибок, удаляет и сохраняет записи.
Создала инсталляционный пакет с помощью InstallShield, установила. При выполнении команды Сохранить "виснет", при запуске отладки написал "база данных только для чтения". Помогите разобраться, пожалуйста.
Код графического интерфейса в xaml:
XML
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
<Page x:Class="последний2.PageEmployee"
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
          mc:Ignorable="d" 
      d:DesignHeight="400" d:DesignWidth="500"
    Title="PageEmployee" Loaded="Page_Loaded">
 
    <StackPanel Margin="3" Background="{StaticResource BackgroundWindowResource}">
       
        <Menu>
            <MenuItem Header="Действие">
                <MenuItem Header="Сохранить" Click="updateButton_Click"></MenuItem>
                <Separator></Separator>
                <MenuItem Header="Удалить" Command="Delete"></MenuItem>
            </MenuItem>
            <MenuItem Header="Справка" Click="MenuHelp_Click"></MenuItem>
        </Menu>
 
        <ToolBar Name="ToolBar1" Margin="3">
 
            <Button x:Name="save" ToolTip="Сохранить" Margin="5,2,5,2" Click="updateButton_Click" >
                <Image Source="Images/save.jpg" />
            </Button>
 
            <Button Name="delete" ToolTip="Удалить" Margin="5,2,5,2" Click="deleteButton_Click">
                <Image Source="Images/delete.jpg" />
            </Button>
 
        </ToolBar>
 
        <TextBlock Margin="5" >Список сотрудников</TextBlock>
        <DataGrid AutoGenerateColumns="False" Name="EmployeeGrid" >
            <DataGrid.Columns>
                <DataGridTextColumn Binding="{Binding Surname}" Header="Фамилия"/>
                <DataGridTextColumn Binding="{Binding Name}" Header="Имя"/>
                <DataGridTextColumn Binding="{Binding Patronymic}" Header="Отчество"/>
                <DataGridTextColumn Header="Должность"/>
                <DataGridTemplateColumn Header="Дата рождения"
                 CellTemplate="{StaticResource DateTemplate}" 
                 CellEditingTemplate="{StaticResource EditingDateTemplate}"/>
                <DataGridTextColumn Binding="{Binding Telephone}" Header="Телефон"/>
                <DataGridTextColumn Binding="{Binding Email}" Header="Электронная почта"/>
            </DataGrid.Columns>
        </DataGrid>
 
    </StackPanel>
 
 
</Page>
Код подключения и все обработчики кнопок в файле кода c#:
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
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
 
namespace последний2
{
    /// <summary>
    /// Логика взаимодействия для PageEmployee.xaml
    /// </summary>
 
    public partial class PageEmployee : Page
    {
        string connectionString;
        SqlDataAdapter adapter;
        DataTable employeeTable;
        
 
        public PageEmployee()
        {
            InitializeComponent();
            // получаем строку подключения из app.config
            connectionString = ConfigurationManager.ConnectionStrings["TitlePersonEntities"].ConnectionString;
        }
 
        private void Page_Loaded(object sender, RoutedEventArgs e)
        {
            string sql = "SELECT * FROM Employee";
            employeeTable = new DataTable();
            SqlConnection connection=null;
            try
            {
                connection = new SqlConnection(connectionString);
                SqlCommand command = new SqlCommand(sql, connection);
                adapter = new SqlDataAdapter(command);
                connection.Open();
                EmployeeGrid.IsReadOnly = false;
                adapter.Fill(employeeTable);
               
                EmployeeGrid.ItemsSource = employeeTable.DefaultView;
               
            } 
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            finally
            {
                if (connection != null)
                    connection.Close();
            }
        }
        private void MenuHelp_Click(object sender, RoutedEventArgs e)      
  {
            try
            {
                Process SysInfo = new Process();
                SysInfo.StartInfo.ErrorDialog = true;
                SysInfo.StartInfo.FileName = "disheshelp.chm";
                SysInfo.Start();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
            private void UpdateDB()
        {
            SqlCommandBuilder comandbuilder = new SqlCommandBuilder(adapter);
            EmployeeGrid.IsReadOnly = false;
            adapter.Update(employeeTable);
            
        }
               private void updateButton_Click(object sender, RoutedEventArgs e)
        {
            UpdateDB();
        }
                private void deleteButton_Click(object sender, RoutedEventArgs e)
        {
            if (EmployeeGrid.SelectedItems != null)
            {
                for (int i = 0; i < EmployeeGrid.SelectedItems.Count; i++)
                {
                    DataRowView datarowView = EmployeeGrid.SelectedItems[i] as DataRowView;
                    if (datarowView != null)
                    {
                        DataRow dataRow = (DataRow)datarowView.Row;
                        dataRow.Delete();
                    }
                }
            }
           
        }
    }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.05.2016, 14:05
Ответы с готовыми решениями:

Ошибка при работе с DataTable - "Столбец доступен только для чтения"
День добрый всем. Решил я создать для себя небольшой класс, со всякими часто...

Ошибка "База данных уже существует". При отсутствии базы данных
День добрый! Помогите, пожалуйста, разобраться с проблемой. Есть довольно...

Ошибка сохранения данных "Ошибка преобразования значения varchar "id" в тип данных int"
private void btnSaveSettings_Click(object sender, EventArgs e) { ...

Обновление данных и ошибка "Является "тип", но используется как "переменная"
Код кнопки обновить ,базу данных (button1) пишет ошибку ...

Ошибка "Попытка чтения или записи в защищенную память" во время выполнения метода DataAdapter.Fill
Делаю так: using (OdbcConnection _conn = new OdbcConnection(_connectionStr) {...

4
OwenGlendower
Супер-модератор
Эксперт .NET
9480 / 8289 / 3547
Регистрация: 17.03.2014
Сообщений: 16,504
Записей в блоге: 1
20.05.2016, 14:24 2
ВераВ, как выглядит строка подключения? Под каким пользователем (админ или обычный юзер) запускается программа?
0
ВераВ
0 / 0 / 0
Регистрация: 02.04.2015
Сообщений: 18
20.05.2016, 16:10  [ТС] 3
XML
1
2
3
4
<connectionStrings>
   <add name="TitlePersonEntities"
 connectionString= "Data Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirectory|\TitlePerson.mdf;Integrated Security=True;Connect Timeout=30"/>
  </connectionStrings>
Добавлено через 11 минут
программа запускается под обычным юзером
0
OwenGlendower
Супер-модератор
Эксперт .NET
9480 / 8289 / 3547
Регистрация: 17.03.2014
Сообщений: 16,504
Записей в блоге: 1
20.05.2016, 16:22 4
ВераВ, и приложение как я понимаю установлено в Program Files? Пользователи не имеет права на запись в этот каталог. Переделайте программу установки так чтобы файл базы данных копировался в профиль пользователя.
1
ВераВ
0 / 0 / 0
Регистрация: 02.04.2015
Сообщений: 18
24.05.2016, 10:57  [ТС] 5
Спасибо!!! Так переделать программу, чтобы только база данных копировалась в профиль пользователя не удалось.
Удалось только установить программу в профиль пользователя (или на диск D). Все заработало! Спасибо!
0
24.05.2016, 10:57
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.05.2016, 10:57

Ошибка в приложении "Невозможно найти устанавливаемый ISAM"
При выполнение следующего кода вылезает ошибка: using System; using...

Ошибка при обновлении данных "Для обновления требуется действительный UpdateCommand"
Народ, помогите! Непонятно почему, при обновлении базы данных вдруг появилось...

Многопоточный доступ к файлу и ошибка "Поток был недоступен для чтения"
Здравствуйте. Решил потренироваться в многопоточности, но почему-то все равно...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru