Member 14857740 Ответов: 4

Недопустимое имя файла


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.OleDb;

namespace Personal_Program
{
    public partial class Form1 : Form
    {
        private OleDbConnection dataconnection = new OleDbConnection();
        public Form1()
        {
            InitializeComponent();
            dataconnection.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\Users\\Cristopher\\Documents\Personaldb.accdb; Persist Security Info=True;";
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void CreateBT_Click(object sender, EventArgs e)
        {
                dataconnection.Open();
                OleDbCommand command = new OleDbCommand();
                command.Connection = dataconnection;
                command.CommandText = "INSERT into CreateAccount (FullName, PrefUsername, Birthday, Gender, MobileNo, Password, ConfirmPass) VALUES ('" + FullNameTB.Text + "', '" + PrefUserTB.Text + "', '" + BirthdayDT.Text + "', '" + GenderCB.Text + "', '" + MobileTB.Text + "', '" + SetPassTB.Text + "', '" + ConfirmPassTB.Text + "')";
                
                command.ExecuteNonQuery();
                MessageBox.Show("Account Created. Please login to your account.");
                dataconnection.Close();
        }
    }
}

What I have tried:

I keep on having error with the line where I am trying to open the connectiin of my system with the MS Access database or should I say the line "dataconnection.Open(); I tried renaming the file name and location of my database file but I keep on running for the same error.Please help.

Member 14857740

Я продолжаю иметь ошибку со строкой, где я пытаюсь открыть connectiin моей системы с базой данных MS Access или я должен сказать строку "dataconnection.Open(); я попытался переименовать имя файла и расположение файла моей базы данных, но я продолжаю работать с той же ошибкой.Пожалуйста помочь.

Member 14857740

Я уже пробовал это сделать:

использование системы;
использование системы.Коллекции.Общий;
использование системы.ComponentModel;
использование System.Data;
использование системы.Рисование;
использование System.Linq;
использование System.Text;
использование системы.Нарезание резьбы.Задачи;
использование системы.Окна.Формы;
использование System.Data.Для oledb;

пространство имен Personal_Program
{
общественности частичного класс form1 : форма
{
private OleDbConnection dataconnection = новый OleDbConnection();
открытый form1()
{
метод InitializeComponent();
подключение к данным.Параметр ConnectionString = "Поставщика=Майкрософт.Туз.Oledb для.12.0;Источник Данных=С:\Пользователи\Кристофер\Документы\Personaldb.# то#; сохранять сведения о безопасности=false в;";
}

частный недействительными методе form1_load(объект отправителя, EventArgs в электронной)
{

}

частная CreateBT_Click недействительным(объект отправителя, EventArgs в электронной)
{
подключение к данным.Открыть();
Команда oledbcommand объект = новый объект oledbcommand();
команда.Соединение = подключение к данным;
команда.CommandText = "вставить в CreateAccount (FullName, PrefUsername, Birthday, Gender, MobileNo, Password, ConfirmPass) значения ('" + FullNameTB.Текст + "', '" + PrefUserTB.Текст + "', '" + День Рождения.Текст + "', '" + GenderCB.Текст + "', '" + MobileTB.Текст + "', '" + SetPassTB.Текст + "', '" + ConfirmPassTB.Текст + "')";

команда.Метод executenonquery();
Ящик для сообщений.Показать("Учетная Запись Создана. Пожалуйста, войдите в свой аккаунт.");
подключение к данным.Закрывать();
}
}
}

Member 14857740

Я также попытался поставить коды try{} и catch {}. Все та же ошибка.

CHill60

Вместо того чтобы публиковать много комментариев к своему собственному вопросу, используйте ссылку "улучшить вопрос", чтобы добавить их в свой исходный пост

4 Ответов

Рейтинг:
27

CHill60

Вам не хватает escape - символа-см.

dataconnection.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\Users\\Cristopher\\Documents\Personaldb.accdb; Persist Security Info=True;";
Так и должно быть
dataconnection.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\Users\\Cristopher\\Documents\\Personaldb.accdb; Persist Security Info=True;";
Хорошо - извините, я забыл, что текст будет отформатирован ... исходный бит вашего текста должен быть прочитан
C:\ \ Users \ \ Christopher \ \ Documents \ \ Personaldb.accdb;
без тех пробелов, которые я добавил. У вас есть только одна обратная косая черта перед Personaldb


CHill60

? Я не редактировал это 3 раза!

Maciej Los

Это происходит, когда серверы немного заняты...
Кстати: 5ed!

CHill60

Спасибо за 5 - и объяснение. Мне казалось, что я немного схожу с ума - может быть, так оно и есть :-)

Maciej Los

:смеяться:

Рейтинг:
2

OriginalGriff

Вы должны быть последовательны: "\ \ " - это один символ обратной косой черты, "\P" - плохой символ и не будет компилироваться-вы получите ошибку:

CS1009	Unrecognized escape sequence
"...;Data Source=C:\\Users\\Cristopher\\Documents\Personaldb.accdb; ..."
                                      ^^         ^

Либо используйте двойную обратную косую черту повсюду, либо используйте teh @ перед вашей строкой:
dataconnection.ConnectionString = "...;Data Source=C:\\Users\\Cristopher\\Documents\\Personaldb.accdb;...";
dataconnection.ConnectionString = @"...;Data Source=C:\Users\Cristopher\Documents\Personaldb.accdb;...";


Еще лучше, не Закодируйте строки подключения - всегда загружайте их из конфигурационного файла или аналогичного файла. Таким образом, вам не нужно изменять код и выпускать его непроверенным, когда вы выпускаете программное обеспечение, и вам не нужен другой EXE-файл для каждого отдельного компьютера ...

То, как я это делаю, сложнее, чем вам, вероятно, нужно, но ... Хранилище экземпляров - простой способ обмена конфигурационными данными между приложениями[^]


Maciej Los

5ed!

Рейтинг:
2

Tony Hill

Вам не хватает \ в строке подключения перед именем файла доступа Personaldb.accdb

"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\Users\\Cristopher\\Documents\Personaldb.accdb; Persist Security Info=True;"


должны прочитать

"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\Users\\Cristopher\\Documents\\Personaldb.accdb; Persist Security Info=True;"


Maciej Los

5ed!

Рейтинг:
1

Patrice T

command.CommandText = "INSERT into CreateAccount (FullName, PrefUsername, Birthday, Gender, MobileNo, Password, ConfirmPass) VALUES ('" + FullNameTB.Text + "', '" + PrefUserTB.Text + "', '" + BirthdayDT.Text + "', '" + GenderCB.Text + "', '" + MobileTB.Text + "', '" + SetPassTB.Text + "', '" + ConfirmPassTB.Text + "')";

Не обязательно решение вашего вопроса, но у вас есть еще одна проблема.
Никогда не создавайте SQL-запрос путем объединения строк. Рано или поздно вы сделаете это с помощью пользовательских вводов, и это откроет дверь к уязвимости под названием "SQL-инъекция", она опасна для вашей базы данных и подвержена ошибкам.
Одна кавычка в имени - и ваша программа выйдет из строя. Если пользователь вводит имя, например "Брайан О'Коннер", может привести к сбою вашего приложения, это уязвимость SQL-инъекции, и сбой-это наименьшая из проблем, вредоносный пользовательский ввод, и он продвигается к командам SQL со всеми учетными данными.
SQL-инъекция - Википедия[^]
SQL-инъекция[^]
Атаки SQL-инъекций на примере[^]
PHP: SQL-инъекция - руководство пользователя[^]
Как я могу объяснить SQL-инъекцию без технического жаргона? - Обмен Стеками Информационной Безопасности[^]


Maciej Los

5ed!

Patrice T

Спасибо