Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.10.2016, 16:57   #1
armory
Пользователь
 
Аватар для armory
 
Регистрация: 06.10.2016
Сообщений: 37
По умолчанию как сделать мини-БД?

2Alex11223
я себе такую игрушку по приколу сделал, меню с опциями: депозит, снятие, баланс, выход
только пока не разобрался как сделать мини-БД с логинами паролями и прочей информацией включая историю транзакций, входов и прочего - это реализуется доп. библиотеками или можно даже внутри MS VS реализовать (операторы от System.IO, возможно)?
Учусь кодить на C#/Java.
Не ищу готовых решений.
Всегда благодарен вам за помощь.
armory вне форума Ответить с цитированием
Старый 10.10.2016, 17:04   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Ну если нужно просто с файлами работать, то System.IO.
Можно сериализовывать объекты/коллекции, например XmlSerializer в XML, или JSON (например Json.Net библиотека).

А если какая-нибудь SQL БД нужна, то надо например ADO.NET использовать (или ORM типа Entity Framework). И подключить библиотеку для БД. И установить сервер БД (если не файловая типа SqLite)
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 11.10.2016, 10:51   #3
max_prorok
Форумчанин
 
Регистрация: 06.10.2011
Сообщений: 181
По умолчанию

Ну для локальной машины можно все запилить на базы MS Access, которые входят в стандартный пакет MS Office.
max_prorok вне форума Ответить с цитированием
Старый 11.10.2016, 10:59   #4
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Только MS Office не входит в стандартный пакет винды не говоря уж о невинде

И Access вообще-то не во всех вариантах не 365 офиса есть.

Смысл его брать? Если не хочется ставить сервер, то есть SQLite, SQL Server Compact Edition (немного deprecated), Firebird ("embedded server").
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.

Последний раз редактировалось Alex11223; 11.10.2016 в 11:04.
Alex11223 вне форума Ответить с цитированием
Старый 11.10.2016, 11:36   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

думаю, что обсуждение хранения данных в данной теме - оффтоп.
Автору темы совсем другое нужно - обрабатывать данные. А как и где их хранить, ему в поставновке задачи не указано, можно хранить в собственном формате, в XML. Да хоть в текстовом виде, здесь не это важно.


но, справедливости ради, хочу отметить.
Цитата:
Сообщение от Alex11223
Только MS Office не входит в стандартный пакет винды не говоря уж о невинде
И Access вообще-то не во всех вариантах не 365 офиса есть.
точно так, MS Access не входит в стандартный пакет Windows.
Но зато, начиная с Windows 2000 (или Windows XP, но неважно, читай - "в любой современной версии Windows") в состав Windows входит поставщик (драйвер) данных для работы с форматом данных MS Access.
Который можно использовать из прикладной программы, чтобы писать/читать данные в формате MS Access.

Цитата:
Если не хочется ставить сервер, то есть SQLite, SQL Server Compact Edition (немного deprecated), Firebird ("embedded server").
это всё верно. Это хорошие варианты. но имеют свои "нюансы" при использовании (потребуется с программой таскать доп.библиотеки). Поэтому и вариант использовать встроенный в винду драйвер данных JET тоже отбрасывать не стоит, он имеет право на жизнь.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 11.10.2016, 14:11   #6
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
Это хорошие варианты. но имеют свои "нюансы" при использовании (потребуется с программой таскать доп.библиотеки). Поэтому и вариант использовать встроенный в винду драйвер данных JET тоже отбрасывать не стоит, он имеет право на жизнь.
Ага, у которого еще больше нюансов, вместо просто установить нужный пакет из NuGet (например этот для SQLite) и взять все скопированные библиотеки

Например, для начала надо понять какой драйвер указывать в ConnectionString из всех этих JET 4.0, ACE 12.0 и т.п., и вроде бы там были отличия для х86 и х64.
Потом узнать про совместимость форматов самого файла Access'а (mdb 2000, mdb 2002-2003, accdb из предлагаемого в меню сохранения), потому что программно без Access'а его сложно создать.

Сейчас попробовал, создал mdb файл, не заработал ни один из вариантов отсюда http://stackoverflow.com/questions/1...le-mdb-using-c выдавая исключения типа "[Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified" (которое вроде бы выглядит похожим на ошибку в пути, но нет, он просто C:\db.mdb, как и в примерах Connection String, и файл там лежит).
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 11.10.2016, 14:38   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

я взял код по вашей ссылке.
вот такой:
Код:
using System;
using System.Data;
using System.Data.OleDb;



namespace TestMDB
{
	class Program
	{
		public static void Main(string[] args)
		{
			
			string myConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;"+
				@"Data Source=C:\myPath\myfile.mdb;" +
				"Persist Security Info=True;" +
				"Jet OLEDB:Database Password=myPassword;";
			try
			{
				// Open OleDb Connection
				OleDbConnection myConnection = new OleDbConnection();
				myConnection.ConnectionString = myConnectionString;
				myConnection.Open();

				// Execute Queries
				OleDbCommand cmd = myConnection.CreateCommand();
				cmd.CommandText = "SELECT * FROM `MyTable`";
				OleDbDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection); // close conn after complete

				// Load the result into a DataTable
				DataTable myDataTable = new DataTable();
				myDataTable.Load(reader);
				
				Console.WriteLine("It's OK!");
				
				foreach (DataRow row in myDataTable.Rows)
				{
					Console.WriteLine();
					for(int x = 0; x < myDataTable.Columns.Count; x++)
					{
						Console.Write(row[x].ToString() + " ");
					}
				}
				
			}
			catch (Exception ex)
			{
				Console.WriteLine("OLEDB Connection FAILED: " + ex.Message);
			}

			Console.Write("\nPress any key to continue . . . ");
			Console.ReadKey(true);
		}
	}
}
вот файлик C:\MyPath\myfile.mdb myfile.rar

Windows 7 Prof 64-разрядная
файлик создал с помощью MS Access 2010 (export to format Access 2000)

у меня пример работает.

Последний раз редактировалось Serge_Bliznykov; 11.10.2016 в 14:47.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 11.10.2016, 15:03   #8
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

вин 10 х64 (с офисом), вин 8 х64, вин 7 х64: OLEDB Connection FAILED: The 'Microsoft.Jet.OLEDB.4.0' provider is not registered on the local machine.

вин7 х86, XP: заработало
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 11.10.2016, 15:20   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

ну, значит, я был не прав, использование MS Access не так просто, как мне казалось!

А Вы не пробовали заменить провайдера, вместо "Microsoft.Jet.OLEDB.4.0" использовать "Provider=Microsoft.ACE.OLEDB.12.0; " ?!

на стековерфло есть пути решения этой проблемы:
http://stackoverflow.com/questions/1...-local-machine

цитирую один из советов
Цитата:
I did the following and the issue went away:

Installed the 64 bit version of Microsoft Access Database Engine 2010 Redistributable, as suggested by neo
Changed my provider to Microsoft.ACE.OLEDB.12.0

p.s. непонятно, почему заработало у меня на вин 7 х64. возможно, потому что установлен MS Office и там есть нужный провайдер данных...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 11.10.2016, 15:32   #10
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

С Provider=Microsoft.ACE.OLEDB.12.0 (без установки редиста) тоже так же, только х86 работает. Но еще ХР перестал.

Но да, я вроде бы когда-то как-то так и заменял ACE/JET в зависимости от системы когда надо было с Excel или Access через ADO.NET работать.


Поэтому и говорю, что в большинстве случаев (из тех редких случаев когда нужна именно файловая БД вместо просто XML/JSON) лучше брать SQLite и не париться со всем этим
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как установить виндовс 7 на мак мини без мак ос Alexandr17-10 Windows 9 14.09.2013 23:01
Я создал игру типо марио и хочу сделать её по сети как это сделать? rbkmz Работа с сетью в Delphi 7 14.05.2012 15:58
Как сделать мини чат на сайте Sprat PHP 2 26.10.2011 08:08
как создать мини игру PATRAHILO C++ Builder 5 05.09.2011 08:52