Member 9998945 Ответов: 1

Как решить OLEDB не зарегистрированный в локальной машине


Доступ Oledb в порядке при выполнении с IDE .... но этот код копируется для вставки в файл блокнота и сохранения с расширением .cs и компиляции с cmd ... эту ошибку обнаруживают..
using System;
using System.Data;
using System.Data.OleDb;
using System.Xml.Serialization;


namespace MSAccessTest
{
   
   

    public class MainClass
    {
        public static void Main()
        {
            
            string cnn = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\lovetest.accdb;Persist Security Info=False";
           
            Console.Write("Enter Your Name :");
            string accName = Console.ReadLine();
            Console.Write("Enter Your Love :");
            string accNumber = Console.ReadLine();
            Random percent = new Random();

            int per = percent.Next(20, 99);

            OleDbConnection conn = new OleDbConnection(cnn);
            OleDbCommand cmd = new OleDbCommand();
            cmd.CommandType = CommandType.Text;
            cmd.CommandText = "INSERT INTO love([ID],[YourName], [YourLover],[LovePercent]) Values('"+Guid.NewGuid()+"','" + accName + "','" + accNumber + "','" + per + "')";
            cmd.Connection = conn;
          
            conn.Open();
           

            cmd.ExecuteNonQuery();
            Console.WriteLine("Your score have {0} %",per);
            conn.Close();
}
}
}


Что я уже пробовал:

Я хочу знать, что MS access может подключаться к моему файлу кода c# без IDE.

1 Ответов

Рейтинг:
0

OriginalGriff

Просто: двигатель ACE должен быть установлен и зарегистрирован на машине.
Если это другой компьютер, чем тот, на котором установлена Visual Studio, то установите и зарегистрируйте соответствующую версию ACE - если ваше приложение построено для 64-разрядной версии, вам нужен 64-разрядный ACE, а если это 32-разрядное приложение, вам нужен 32-разрядный движок ACE.

Если это тот же самый компьютер, то, вероятно, вы строите его для неправильной цели: 32 бит вместо 64 или наоборот. Проверьте свойства сборки IDE, чтобы узнать, для какой версии она строится, и включите их в параметры командной строки для "ручной" сборки.

Но сделай себе одолжение, и не делай этого так! Никогда не объединяйте строки для построения команды SQL. Это оставляет вас широко открытыми для случайной или преднамеренной атаки SQL-инъекции, которая может уничтожить всю вашу базу данных. Вместо этого используйте параметризованные запросы.

Когда вы объединяете строки, вы вызываете проблемы, потому что SQL получает такие команды, как:

SELECT * FROM MyTable WHERE StreetAddress = 'Baker's Wood'
Цитата, добавленная пользователем, завершает строку в том, что касается SQL, и вы получаете проблемы. Но могло быть и хуже. Если я приду и наберу вместо этого: "x';DROP TABLE MyTable;--", то SQL получит совсем другую команду:
SELECT * FROM MyTable WHERE StreetAddress = 'x';DROP TABLE MyTable;--'
Которые SQL видит как три отдельные команды:
SELECT * FROM MyTable WHERE StreetAddress = 'x';
Совершенно правильный выбор
DROP TABLE MyTable;
Вполне допустимая команда "удалить таблицу"
--'
А все остальное-это комментарии.
Так оно и происходит: выбирает любые совпадающие строки, удаляет таблицу из базы данных и игнорирует все остальное.

Поэтому всегда используйте параметризованные запросы! Или будьте готовы часто восстанавливать свою БД из резервной копии. Вы ведь регулярно делаете резервные копии, не так ли?