Как подключить базу данных Microsoft Access к Visual Studio C#
Я использую визуальные студийные формы Windows для проекта входа/регистрации. Итак, как мне подключить мою базу данных доступа Microsoft к моему проекту Visual Studio и установить соединение в коде, чтобы я мог написать команду.
Abdi L 21 Ноя 2022 в 23:21
Вам не нужно подключать файлы базы данных к IDE — просто напишите код базы данных с помощью ADO.NET и укажите путь к файлу базы данных Access в строке подключения OleDbConnection . . хотя вы можете подключиться к нему с помощью панели «Обозреватель серверов», если хотите использовать БД в качестве эталона или для ее проверки, для разработки программного обеспечения это вовсе не обязательно.
21 Ноя 2022 в 23:26
1 ответ
Он использует строку подключения, аналогичную SQL. public string ConnString => $»Provider=Microsoft.ACE.OLEDB.16.0;Data Source = ;»
Чтобы сохранить файл с помощью ADO.NET, он будет выглядеть так:
private void ExecuteWrite(string sql) < try < using (OleDbConnection conn = new OleDbConnection(ConnString)) < OleDbCommand cmd = new OleDbCommand(sql, conn) < CommandType = CommandType.Text >; conn.Open(); _ = cmd.ExecuteNonQuery(); > > catch (Exception e) < MessageBox.Show(e.Message); Console.WriteLine(e.ToString()); >>
Пара замечаний по Access:
- Access имеет свою собственную форму SQL, которая сильно отличается от той, к которой вы привыкли, например, вместо char varchar у вас будут такие типы, как text . Ознакомьтесь с полным списком различий здесь
- строка SQL, которую вы пишете, должна использовать » , чтобы избежать таких вещей, как проблемные имена столбцов.
- Таблицы не могут содержать больше 255 столбцов по какой-то причине. Будьте готовы создавать отдельные запросы для разделения любой массивной таблицы, превышающей этот предел, поскольку Access сразу откажется обрабатывать этот запрос. Это единственная известная мне БД, которая страдает от такого ограничения, и это было проблемой для проекта, над которым я работал. Я обошел это, используя LINQ, чтобы разделить нужные столбцы, а затем создать отдельные запросы CREATE или INSERT.
Narish 21 Ноя 2022 в 23:42
«строка SQL, которую вы пишете, должна использовать «, чтобы избежать таких вещей, как проблемные имена столбцов» — я думал, что Access использует [] как SQL Server (а в Access нет режима ANSI/ISO переключиться, афаик?)
21 Ноя 2022 в 23:44
«Это единственная известная мне БД, которая страдает от такого ограничения» — SQL Server и Postgres имеют ограничения на количество страниц (это означает, что вы не можете превышать ~ 1000 столбцов в таблице, по крайней мере без использования столбцов SPARSE ).
21 Ноя 2022 в 23:45
Спасибо, но мне нужно добавить какие-либо библиотеки вверху, например, «используя system.text» или что-то в этом роде. И где мне найти путь к файлу базы данных.
22 Ноя 2022 в 00:03
Это зависит от того, на какую версию .NET вы ориентируетесь. Если вы ориентируетесь на .NET Framework, вам не нужно ничего делать, но если вы ориентируетесь на .NET Core или .NET 6+, вам понадобится nuget.org/packages/System.Data.OleDb
Простое подключение к БД Access
В приложении необходимо подключиться к базе данных access, в которой есть пара таблиц. По «строке» и «колонке» нужно найти значение. Не силен в теории баз данных, прошу предоставить отрывок кода, позволяющий подключиться к БД, и по двум «координатам» найти значение. Самым простым способом. Заранее спасибо
Отслеживать
задан 15 мая 2020 в 21:16
3 2 2 бронзовых знака
откуда вы соединяетесь и что используете?
15 мая 2020 в 21:21
@AzizUmarov не очень понимаю вопрос. Пишу класс только для этой цели. Применять буду в разных задачах. База данных на моем жёстком диске в файле
15 мая 2020 в 21:24
Ясно пишите на языке программирования? Используете студию, framework? Меня не интересует где лежит база.
Практическое руководство. Привязка данных к элементу управления DataGridView в Windows Forms
Элемент управления DataGridView поддерживает стандартную модель привязки данных Windows Forms, допускающую привязку к разнообразным источникам данных. Обычно выполняется привязка к объекту BindingSource, который управляет взаимодействием с источником данных. Компонент BindingSource может быть любым источником данных Windows Forms, что обеспечивает большую гибкость при выборе или изменении расположения данных. Дополнительные сведения об источниках данных, поддерживаемых элементом управления DataGridView, см. в разделе Общие сведения об элементе управления DataGridView.
Visual Studio имеет обширную поддержку привязки данных к элементу управления DataGridView. Дополнительные сведения см. в статье Практическое руководство. Привязка данных к элементу управления DataGridView в Windows Forms с помощью конструктора.
Подключение элемента управления DataGridView к данным
- Реализуйте метод, обрабатывающий получение данных. В примере кода ниже реализован метод GetData , инициализирующий компонент SqlDataAdapter и использующий его для заполнения DataTable. Затем он привязывает DataTable к BindingSource.
- В обработчике событий Load формы привяжите элемент управления DataGridView к компоненту BindingSource и вызовите метод GetData для получения данных.
Пример
Этот полный пример кода извлекает данные из базы данных для заполнения элемента управления DataGridView в форме Windows. Форма также содержит кнопки для повторной загрузки данных и отправки изменений в базу данных.
Для этого примера требуются:
- доступ к примеру базы данных Northwind. Дополнительные сведения об установке примера базы данных Northwind см. в разделе Получение примеров баз данных для примеров кода ADO.NET;
- ссылки на сборки System, System.Windows.Forms, System.Data и System.Xml.
Чтобы выполнить сборку и запуск этого примера, вставьте код в файл кода Form1 в новом проекте Windows Forms. Сведения о сборке из командной строки C# или Visual Basic см. в разделах Сборка из командной строки с помощью csc.exe или Сборка из командной строки.
Заполните переменную connectionString в примере значениями для подключения к примеру базы данных Northwind на SQL Server. Проверка подлинности Windows, также называемая встроенной безопасностью, является более безопасным способом подключения к базе данных, чем хранение пароля в строке подключения. Дополнительные сведения о безопасности подключений см. в разделе Защита сведений о подключении.
using System; using System.Data; using System.Data.SqlClient; using System.Globalization; using System.Windows.Forms; namespace WindowsFormsApp < public partial class Form1 : Form < public Form1() < InitializeComponent(); >> > public class Form1 : Form < private DataGridView dataGridView1 = new DataGridView(); private BindingSource bindingSource1 = new BindingSource(); private SqlDataAdapter dataAdapter = new SqlDataAdapter(); private Button reloadButton = new Button(); private Button submitButton = new Button(); [STAThread()] public static void Main() < Application.Run(new Form1()); >// Initialize the form. public Form1() < dataGridView1.Dock = DockStyle.Fill; reloadButton.Text = "Reload"; submitButton.Text = "Submit"; reloadButton.Click += new EventHandler(ReloadButton_Click); submitButton.Click += new EventHandler(SubmitButton_Click); FlowLayoutPanel panel = new FlowLayoutPanel < Dock = DockStyle.Top, AutoSize = true >; panel.Controls.AddRange(new Control[] < reloadButton, submitButton >); Controls.AddRange(new Control[] < dataGridView1, panel >); Load += new EventHandler(Form1_Load); Text = "DataGridView data binding and updating demo"; > private void GetData(string selectCommand) < try < // Specify a connection string. // Replace with the SQL Server for your Northwind sample database. // Replace "Integrated Security=True" with user login information if necessary. String connectionString = "Data Source=;Initial Catalog=Northwind;" + "Integrated Security=True"; // Create a new data adapter based on the specified query. dataAdapter = new SqlDataAdapter(selectCommand, connectionString); // Create a command builder to generate SQL update, insert, and // delete commands based on selectCommand. SqlCommandBuilder commandBuilder = new SqlCommandBuilder(dataAdapter); // Populate a new data table and bind it to the BindingSource. DataTable table = new DataTable < Locale = CultureInfo.InvariantCulture >; dataAdapter.Fill(table); bindingSource1.DataSource = table; // Resize the DataGridView columns to fit the newly loaded content. dataGridView1.AutoResizeColumns( DataGridViewAutoSizeColumnsMode.AllCellsExceptHeader); > catch (SqlException) < MessageBox.Show("To run this example, replace the value of the " + "connectionString variable with a connection string that is " + "valid for your system."); >> private void Form1_Load(object sender, EventArgs e) < // Bind the DataGridView to the BindingSource // and load the data from the database. dataGridView1.DataSource = bindingSource1; GetData("select * from Customers"); >private void ReloadButton_Click(object sender, EventArgs e) < // Reload the data from the database. GetData(dataAdapter.SelectCommand.CommandText); >private void SubmitButton_Click(object sender, EventArgs e) < // Update the database with changes. dataAdapter.Update((DataTable)bindingSource1.DataSource); >>
Imports System.Data.SqlClient Imports System.Windows.Forms Public Class Form1 Inherits Form Private dataGridView1 As New DataGridView() Private bindingSource1 As New BindingSource() Private dataAdapter As New SqlDataAdapter() Private WithEvents ReloadButton As New Button() Private WithEvents SubmitButton As New Button() Public Shared Sub Main() Application.Run(New Form1()) End Sub ' Initialize the form. Public Sub New() dataGridView1.Dock = DockStyle.Fill ReloadButton.Text = "Reload" SubmitButton.Text = "Submit" Dim panel As New FlowLayoutPanel With < .Dock = DockStyle.Top, .AutoSize = True >panel.Controls.AddRange(New Control() ) Controls.AddRange(New Control() ) Text = "DataGridView data binding and updating demo" End Sub Private Sub GetData(ByVal selectCommand As String) Try ' Specify a connection string. ' Replace with the SQL Server for your Northwind sample database. ' Replace "Integrated Security=True" with user login information if necessary. Dim connectionString As String = "Data Source=;Initial Catalog=Northwind;" + "Integrated Security=True;" ' Create a new data adapter based on the specified query. dataAdapter = New SqlDataAdapter(selectCommand, connectionString) ' Create a command builder to generate SQL update, insert, and ' delete commands based on selectCommand. Dim commandBuilder As New SqlCommandBuilder(dataAdapter) ' Populate a new data table and bind it to the BindingSource. Dim table As New DataTable With < .Locale = Globalization.CultureInfo.InvariantCulture >dataAdapter.Fill(table) bindingSource1.DataSource = table ' Resize the DataGridView columns to fit the newly loaded content. dataGridView1.AutoResizeColumns( DataGridViewAutoSizeColumnsMode.AllCellsExceptHeader) Catch ex As SqlException MessageBox.Show("To run this example, replace the value of the " + "connectionString variable with a connection string that is " + "valid for your system.") End Try End Sub Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) _ Handles Me.Load ' Bind the DataGridView to the BindingSource ' and load the data from the database. dataGridView1.DataSource = bindingSource1 GetData("select * from Customers") End Sub Private Sub ReloadButton_Click(ByVal sender As Object, ByVal e As EventArgs) _ Handles ReloadButton.Click ' Reload the data from the database. GetData(dataAdapter.SelectCommand.CommandText) End Sub Private Sub SubmitButton_Click(ByVal sender As Object, ByVal e As EventArgs) _ Handles SubmitButton.Click ' Update the database with changes. dataAdapter.Update(CType(bindingSource1.DataSource, DataTable)) End Sub End Class
См. также
- DataGridView
- DataGridView.DataSource
- BindingSource
- Отображение данных в элементе управления DataGridView в Windows Forms
- Защита сведений о подключении
Совместная работа с нами на GitHub
Источник этого содержимого можно найти на GitHub, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.
SQLite — замечательная встраиваемая БД (часть 2)
В этой части будут затронуты непростые вопросы использования SQLite через работу с его программным интерфейсом (API).
Что такое SQLite API? Это набор функций sqlite3_XXX на языке C.
Заголовки этих функций находятся в sqlite3.h, а описание API в виде одного большого HTML находится тут.
Мы начнем использовать API, а позднее плавно перейдем к вопросам оборачивания его в уютный фреймворк.
Попробуем создать небольшой проект на C++ (я делал в MS Visual Studio), который что-то делает с SQLite базой.
Использовать SQLite в своем проекте можно двумя способами.
«Вкомпилировать» код (если это C или C++). Или загружать и использовать sqlite3.dll (позволяет легко обновлять SQLite и не привязан к языку).
В любом случае, надо создать новый проект (консольного) приложения (я использовал MS Visual Studio) и добавить в него вот такой main.cpp:
const char * SQL = «CREATE TABLE IF NOT EXISTS foo(a,b,c); INSERT INTO FOO VALUES(1,2,3); INSERT INTO FOO SELECT * FROM FOO;» ;
int main ( int argc , char ** argv )
sqlite3 * db = 0 ; // хэндл объекта соединение к БД
char * err = 0 ;
// открываем соединение
if ( sqlite3_open ( «my_cosy_database.dblite» , & db ) )
fprintf ( stderr , «Ошибка открытия/создания БД: %s\n» , sqlite3_errmsg ( db ) ) ;
// выполняем SQL
else if ( sqlite3_exec ( db , SQL , 0 , 0 , & err ) )
<
fprintf ( stderr , «Ошибка SQL: %sn» , err ) ;
sqlite3_free ( err ) ;
>
// закрываем соединение
sqlite3_close ( db ) ;
return 0 ;
>
Далее, если мы желаем собрать проект вместе с кодом SQLite, то надо:
— скачать исходный код в виде amalgamation;
— извлечь из него sqlite3.h и sqlite3.c и добавить их в проект.
Если же мы хотим использовать sqlite3.dll, необходимо:
— скачать SQLite DLL и распаковать;
— выполнить «LIB.EXE /DEF:sqlite3.def» в папке куда распаковали для получения sqlite3.lib (убедитесь, что пути к lib.exe прописаны через вызов vcvars32.bat);
— включить в проект sqlite3.lib;
— скачать amalgamation и извлечь из него sqlite3.h;
— включить в проект sqlite3.h;
Компилируем, выполняем (во втором случае, DLL должна быть доступна для исполняемого файла).
При первом запуске будет создан файл «my_cosy_database.dblite» с БД, в нем — одна таблица и две записи в ней.
При последующих запусках — программа будет присоединяться к уже существующей БД и удваивать число записей в таблице.
Давайте разбираться с кодом проекта.
Использование SQLite предполагает, что мы хотим выполнять команды на языке SQL в какой-то БД (Ваш К.О.!).
Можно представить работу с SQLite базой как работу с файлами в ОС Windows. Мы открываем файл и получаем _хэндл_ файла, к которому «привязан» некий системный объект (файл). Передавая этот хэндл в различные функции мы просим систему что-то сделать с файлом. Затем — закрываем файл. Также и в SQLite. Мы открываем файл с БД и получаем хэндл объекта «соединение к БД». Затем мы исполняем некие SQL команды через вызовы функций, получающих этот хэндл, и, в конце, закрываем соединение.
Ничего оригинального, особенного или хитрого, как видим, тут нет.
Расширение файла с БД SQLite не стандартизовано. Некоторые делают его «.sqlite3», но можно поставить любое.
int sqlite3_open (
const char * filename , /* Database filename (UTF-8) */
sqlite3 ** ppDb /* OUT: SQLite db handle */
) ;
создает или открывает БД в указанном файле (UTF-8!) и заносит хендл соединения в db. Она возвращает 0 (успех) или код ошибки. Закрывающий вызов sqlite3_close нужен в любом случае (даже при ошибке sqlite3_open).
int sqlite3_exec (
sqlite3 *, /* An open database */
const char * sql , /* SQL to be evaluated (UTF-8) */
int ( * callback ) ( void *, int , char **, char ** ) , /* Callback function */
void *, /* 1st argument to callback */
char ** errmsg /* Error msg written here */
) ;
выполняет команду SQL (состояющую из одного или нескольких операторов SQL в UTF-8, разделенных «;») в контексте указанного (открытого) соединения к БД.
Функция обратного вызова (callback) и custom аргумент к ней нужны, если делается SELECT (для извлечения данных). Об этом позже, пока не используем.
В параметре errmsg можно получить текст ошибки и позднее очистить его через sqlite3_free. Если передать здесь NULL, то текста ошибки не получим.
Как и sqlite3_open возвращается 0 или код ошибки.
Команда «CREATE TABLE» содержит уточнение «IF NOT EXISTS». Это означает, что таблица создается, если ее — нет. Если есть, то ничего не происходит (и нет ошибки).
Собственно, вот и все. Несмотря на то, что в реальных проектах не используются ни sqlite3_open (есть более мощный вызов sqlite3_open_v2), ни sqlite3_exec (обычно используется связка вызовов, компилирующих SQL, привязывающих параметры и пр.) это вполне рабочий проект.
Он несет и еще одну важную миссию. Как уже было сказано при каждом запуске он удваивает кол-во строк в таблице foo. После 20 запусков в таблице будет ~2 млн записей.
Т.е. 21-й запуск вставляет ~2 млн записей.
На моей машине (Windows 7 x64, i5 2.8 Ghz, HDD, не SSD ) это заняло ~ 15 секунд. Пускай это убогий и синтетический тест, но он все-таки дает определенное представление о производительности SQLite.
Продолжение следует.
