В окне приложения открывается пустой документ
В моем приложении после авторизации, пользователю в combobox видны только те документы, к которым у него есть доступ (в БД при добавлении документа и сотрудника указываю обоим уровень доступа от 1 до 4). Но при открытии выходит только пустое окно, без содержимого.
Ранее, до добавления уровней доступа, у меня правильно открывались все документы.
В БД в таблицу document в столбце name храню имя документа, а в content путь к документу, access_level - уровень доступа
в таблицу user храню логин, пароль, фио и тд и уровень доступа.
скину сюда код всех 3 форм в приложении
public partial class Avtorization : Form
{
public static int currentUserAccessLevel;
public Avtorization()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
{
String LoginUser = textBox_login.Text;
String PassUser = textBox_password.Text;
DataTable table = new DataTable();
MySqlDataAdapter adapter = new MySqlDataAdapter();
using (MySqlConnection connection = Database.GetConnection())
{
MySqlCommand command = new MySqlCommand("SELECT * FROM `User` WHERE `IDUser` = @uL AND `Password` = @uP", Database.GetConnection());
command.Parameters.Add("@uL", MySqlDbType.VarChar).Value = LoginUser;
command.Parameters.Add("@uP", MySqlDbType.VarChar).Value = PassUser;
adapter.SelectCommand = command;
adapter.Fill(table);
}
using (MySqlConnection connection = Database.GetConnection())
{
MySqlCommand command = new MySqlCommand("SELECT Access_level FROM user WHERE IDUser = @uL", connection);
command.Parameters.AddWithValue("@uL", LoginUser); // Используйте LoginUser
using (MySqlDataReader reader = command.ExecuteReader())
{
if (reader.Read())
{
// Сохраните уровень секретности для использования в Mainform
Mainform.currentUserAccessLevel = Convert.ToInt32(reader["Access_level"]);
this.Hide();
Mainform mainform = new Mainform();
mainform.Show();
}
else
{
MessageBox.Show("Неверные логин или пароль. Попробуйте снова");
return;
}
//if (table.Rows.Count > 0)
}
}
}
}
}
public partial class Mainform : Form
{
public static int currentUserAccessLevel;
public Mainform()
{
InitializeComponent();
FillComboBox();
}
private void FillComboBox()
{
// Очистка combobox
comboBoxFiles.Items.Clear();
// Выполнение запроса для получения имен файлов
using (MySqlConnection connection = Database.GetConnection())
{
MySqlCommand command = new MySqlCommand("SELECT Name FROM document WHERE Access_Level <= @accessLevel", connection);
command.Parameters.AddWithValue("@accessLevel", currentUserAccessLevel);
using (MySqlDataReader reader = command.ExecuteReader())
{
while (reader.Read())
{
comboBoxFiles.Items.Add(reader["Name"].ToString());
}
}
}
}
private void comboBoxFiles_SelectedIndexChanged(object sender, EventArgs e)
{
string selectedFileName = comboBoxFiles.SelectedItem.ToString();
string filePath = GetFilePath(selectedFileName);
if (!string.IsNullOrEmpty(filePath))
{
// Создать новую форму для отображения файла
FormFileContent formFileContent = new FormFileContent(filePath, currentUserAccessLevel);
formFileContent.Show();
}
}
private string GetFilePath(string fileName)
{
using (MySqlConnection connection = Database.GetConnection())
{
MySqlCommand command = new MySqlCommand("SELECT Content FROM document WHERE Name = @fileName", connection); // Убрали проверку доступа
command.Parameters.AddWithValue("@fileName", fileName);
string filePath = (string)command.ExecuteScalar();
return filePath;
}
}
private void TextBoxSearch_TextChanged(object sender, EventArgs e)
{
string searchText = textBoxSearch.Text.Trim();
FillComboBox(searchText);
}
// Перегруженный метод для поиска файлов
private void FillComboBox(string searchText)
{
// Очистка combobox
comboBoxFiles.Items.Clear();
using (MySqlConnection connection = Database.GetConnection())
{
MySqlCommand command = new MySqlCommand("SELECT Name, Content FROM document WHERE Name LIKE @searchText OR Content LIKE @searchText", connection);
command.Parameters.AddWithValue("@searchText", "%" + searchText + "%");
using (MySqlDataReader reader = command.ExecuteReader())
{
while (reader.Read())
{
// Формируем строку, содержащую имя и часть содержимого
string itemText = $"{reader["Name"].ToString()} ({reader["Content"].ToString().Substring(0, Math.Min(reader["Content"].ToString().Length, 20))})";
// Добавьте имя файла в combobox
comboBoxFiles.Items.Add(itemText);
}
}
}
}
private void Mainform_Load(object sender, EventArgs e)
{
currentUserAccessLevel = Avtorization.currentUserAccessLevel; // Доступ к статической переменной Avtorization
}
}
public partial class FormFileContent : Form
{
private string _filePath;
private int _accessLevel;
public FormFileContent(string filePath, int accessLevel)
{
InitializeComponent();
_filePath = filePath;
_accessLevel = accessLevel;
// Проверка доступа к файлу в FormFileContent:
if (GetAccessLevel(_filePath) <= _accessLevel)
{
// Чтение и отображение файла
string extension = System.IO.Path.GetExtension(_filePath).ToLower();
try
{
if (extension == ".docx")
{
// Чтение содержимого .docx файла
using (WordprocessingDocument doc = WordprocessingDocument.Open(_filePath, false))
{
string text = doc.MainDocumentPart.Document.InnerText;
richTextBoxContent.Text = text;
}
}
else if (extension == ".pdf")
{
// Чтение содержимого .pdf файла
PdfReader reader = new PdfReader(_filePath);
string text = PdfTextExtractor.GetTextFromPage(reader, 1); // Читаем первую страницу
richTextBoxContent.Text = text;
}
else
{
// Обработка файлов других типов (или сообщение об ошибке)
MessageBox.Show("Неподдерживаемый тип файла.", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
catch (Exception ex)
{
MessageBox.Show($"Ошибка: {ex.Message}", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
private int GetAccessLevel(string filePath)
{
// Метод для получения уровня доступа к файлу по его пути
// (запрос к базе данных)
using (MySqlConnection connection = Database.GetConnection())
{
MySqlCommand command = new MySqlCommand("SELECT Access_level FROM document WHERE Content = @filePath", connection); // Важно! Используем "Content"
command.Parameters.AddWithValue("@filePath", filePath);
using (MySqlDataReader reader = command.ExecuteReader())
{
if (reader.Read())
{
return Convert.ToInt32(reader["Access_level"]);
}
}
}
return -1; // Возвращаем -1, если доступ не найден
}
}
Пробовала запускать с точками останова, в выводе мне писали, что пропущены символы. Думала нужно включить символы в настройках NuGet, но не смогла разобраться.
"мой проект.exe" (CLR v4.0.30319: мой проект.exe). Загружено "C:путь\bin\x64\Debug\DocumentFormat.OpenXml.Framework.dll". Загрузка символов пропущена. Модуль оптимизирован, включен параметр отладчика "Только мой код".
"мой проект.exe" (CLR v4.0.30319: мой проект.exe). Загружено "C:\windows\Microsoft.Net\assembly\GAC_MSIL\WindowsBase\v4.0_4.0.0.0__31bf3856ad364e35\WindowsBase.dll". Загрузка символов пропущена. Модуль оптимизирован, включен параметр отладчика "Только мой код".
"мой проект.exe" (CLR v4.0.30319: мой проект.exe). Загружено "путь\bin\x64\Debug\itextsharp.dll". Сборка модуля выполнена без символов.
Программа "[4484] мой проект.exe" завершилась с кодом 4294967295 (0xffffffff).