Я пишу программу, где у меня есть несколько большое количество файлов .mdb, и мне нужно иметь возможность подключаться к каждому файлу и выполнять поиск через них и проверять данные пользователя на значения в базе данных. Я не хочу жестко кодировать каждое соединение, потому что базы данных содержат информацию о брандмауэре и правила для определенных местоположений и сетевых администраторов здесь имеют тенденцию добавлять больше файлов доступа в папку, и было бы плохо, если бы нужно было пойти и изменить источник программы код каждый раз, когда это происходит. Особенно когда проект уже не в моих руках, и другой разработчик должен будет работать над ним.C# - Динамический доступ к списку файлов базы данных Microsft Access (.mdb) и открытие их для поиска данных
В настоящее время я создал функцию, которая создает список файлов (видов) файлов, которые заканчиваются расширениями .mdb или .ldb в текущем каталоге. У меня также есть строковый массив имен файлов и вывод их с помощью окна сообщений, чтобы подтвердить, что общая идея метода работает. Программа способна правильно перечислять имена каждого файла с расширением .mdb, поэтому я знаю, что он хотя бы работает, вытягивая каждый файл с этим расширением. Теперь я сталкиваюсь с проблемой прокрутки и открытия каждой базы данных, чтобы вытащить нужную мне информацию. Здесь я смущен. Вот эта функция до сих пор:
private void SelectDstIPTable()
{
//Write SQL code to select table
//Select the table and pull the info
//Do something?
//Sort?
//Does this need to be moved out of the method scope to the whole class?
string strQuery = "SELECT * FROM devices WHERE dst_IP like '% " + textBox1.Text + "%' OR src_ip Like '%" + textBox1.Text + "%'";
//This will be the list of files that end in .mbd that the code will loop through looking for the IP
string currentDirectory = Directory.GetCurrentDirectory();
var ext = new List<string> { "mdb", "ldb" };
var myFiles = Directory.GetFiles(currentDirectory, "*.*", SearchOption.AllDirectories).Where(s => ext.Contains(Path.GetExtension(s)));
string[] fileArray = Directory.GetFiles(currentDirectory, "*.mdb", SearchOption.AllDirectories);
string allNames = "";
//Just confirmation that this actually works
foreach (string name in fileArray)
{
allNames += name + "\n";
}
MessageBox.Show(allNames);
//Now we actually need to do something
}
У меня также есть еще одна функция, которая устанавливает соединение для конкретной базы данных, чтобы убедиться, что мой код для проверки инфо базы данных является действительным. К сожалению, это не так, как здесь, но соответствующий код в любом случае:
private string connParam = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=PathToDatabaseFile.mdb";
private void OpenConnection()
{
firewallConn.ConnectionString = connParam;
firewallConn.Open();
successfulConnection = true;
MessageBox.Show("Connection successful!");
}
private void EstablishConnection()
{
//There's a slight delay in making the connection now that I wrapped it in exception handling
//TODO: Try to speed that up and figure out why it was slowed down by a noticable ammount
try
{
if (firewallConn != null && firewallConn.State == ConnectionState.Closed)
OpenConnection();
else
MessageBox.Show("The connection has already been established.\nType ''Close me'' to close the connection.");
}
catch (Exception exception)
{
MessageBox.Show(exception.ToString());
}
}
Если больше деталей необходимо, просто дайте мне знать, и я обеспечу, что я могу.
Забудьте о петле в течение минуты. Вы знаете, как открыть файл .mdb? – elyashiv
не должно быть сложно сделать это более динамичным, просто измените строку подключения, попробуйте открыть, если не удастся, пропустите, если удастся сделать. – BugFinder
@Elyashiv Да - я добавил соответствующий код. БрандмауэрConn.ConnectionString был случайно удален, когда я удалил некоторые комментарии для публикации. Я это исправил. Он успешно соединяется с одной базой данных. – Ryan