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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.06.2011, 22:44   #1
Smile08
 
Регистрация: 07.11.2010
Сообщений: 4
Восклицание Путь к бд access

Здрасте)))Возникла проблема следующего характера : на форме textBox с кнопкой открытия файла (openFileDialog) далее с открытым файлом выполняются некоторые операции и в итоге при нажатии на другую кнопку в базу access должны записываться три значения.База лежит в одной папке с прогой - так вот проблема состоит в том что бы корректно указать относительный путь к базе, если указывать полный путь то все работает норамльно(но прога должна перекочевать на другие компы).Суть пороблемы в том что при открытии файла через openFileDialog путь к фалу сохраняется и каким то образом передается в параметры подключения к базе и выскакивает ошибка типа "не могу найти файл С:\....\ххх.mdb" Вот код открытия файла :
Код:
public void button3_Click(object sender, EventArgs e)
        {
            openFileDialog1.InitialDirectory = @".\";
            openFileDialog1.ShowDialog();
            textBox1.Text = openFileDialog1.FileName;
            openFileDialog1.Reset();
        }
А вот подключение к базе:
Код:
private void button4_Click(object sender, EventArgs e) 
{
    string connectionString =
                "provider=Microsoft.Jet.OLEDB.4.0;data source=" + @".\DataBase.mdb";
    OleDbConnection myOleDbConnection = new OleDbConnection(connectionString);
    OleDbCommand myOleDbCommand = myOleDbConnection.CreateCommand();
    myOleDbCommand.CommandText = "INSERT INTO Statik" +
    "(Hash, Way, Alg)" +
    "VALUES('" + this.textBox2.Text + "', '" + this.textBox1.Text + "','"+ this.ChosenAlg +"')";
    myOleDbConnection.Open();
    myOleDbCommand.ExecuteNonQuery();
    myOleDbConnection.Close();
    MessageBox.Show("Запись прошла успешно", "Всё правильно сделал!!!");
        }
А если путь к базе указать следующим образом то все работает исправно :
Код:
string connectionString =
                "provider=Microsoft.Jet.OLEDB.4.0;data source=C:\\Documents and Settings\\Admin\\Мои документы\\Visual Studio 2008\\Projects\\WindowsFormsApplication6\\WindowsFormsApplication6\\bin\\Debug\\DataBase.mdb";
каким образом они взаимодействуют я не понимаю.
Работаю в VS 2008
Smile08 вне форума Ответить с цитированием
Старый 06.06.2011, 23:15   #2
Spawn™Production®
Форумчанин
 
Аватар для Spawn™Production®
 
Регистрация: 06.05.2011
Сообщений: 287
По умолчанию

OpenFileDialog меняет WorkingDirectory всего навсего.
Путь можно указывать относительно Application.StartupPath, например.
Spawn™Production® вне форума Ответить с цитированием
Старый 06.06.2011, 23:22   #3
Daramant
Форумчанин
 
Регистрация: 06.01.2009
Сообщений: 340
По умолчанию

Цитата:
Суть пороблемы в том что при открытии файла через openFileDialog путь к фалу сохраняется и каким то образом передается в параметры подключения к базе и выскакивает ошибка типа "не могу найти файл С:\....\ххх.mdb" Вот код открытия файла :
Изменяется текущая директория, поэтому и не находит.
Вычисляйте полный путь относительно exe-файла:
Код:
            string ExePath = System.IO.Path.GetDirectoryName(Application.ExecutablePath);
            string DbFileName = "DataBase.mdb";
            string DbPath = System.IO.Path.Combine(ExePath, DbFileName);
            string connectionString = String.Format("provider=Microsoft.Jet.OLEDB.4.0;data source={0}", DbPath);
P.S.
А если пользователь нажмет отмену в окне выбора файла, где проверка ?
Цитата:
Код:
public void button3_Click(object sender, EventArgs e)
        {
            openFileDialog1.InitialDirectory = @".\";
            openFileDialog1.ShowDialog();
            textBox1.Text = openFileDialog1.FileName;
            openFileDialog1.Reset();
        }
Пишите так:
Код:
            openFileDialog1.InitialDirectory = @".\";
            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                textBox1.Text = openFileDialog1.FileName;
            }
Истинный успех – это то, что Вы сделали в сравнении с тем, что могли бы сделать.
Никогда не бойся делать то, что ты не умеешь. Помни, ковчег был построен любителем. Профессионалы построили "Титаник".
Daramant вне форума Ответить с цитированием
Старый 06.06.2011, 23:37   #4
Spawn™Production®
Форумчанин
 
Аватар для Spawn™Production®
 
Регистрация: 06.05.2011
Сообщений: 287
По умолчанию

Код:
string ExePath = System.IO.Path.GetDirectoryName(Application.ExecutablePath);
лучше
Код:
Application.StartupPath
Spawn™Production® вне форума Ответить с цитированием
Старый 07.06.2011, 09:08   #5
Smile08
 
Регистрация: 07.11.2010
Сообщений: 4
По умолчанию

Цитата:
А если пользователь нажмет отмену в окне выбора файла, где проверка ?
Цитата:
Код:


public void button3_Click(object sender, EventArgs e)
{
openFileDialog1.InitialDirectory = @".\";
openFileDialog1.ShowDialog();
textBox1.Text = openFileDialog1.FileName;
openFileDialog1.Reset();
}

Пишите так:
Мне она здесь не нужна(можно же просто просто открыть диалог по ошибке), он у меня в другой форме проводится.

Последний раз редактировалось Smile08; 07.06.2011 в 09:12.
Smile08 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Отображение картинки в C++ в формате jpeg, используя "путь" записанный в базе данных типа Access Gared Помощь студентам 0 15.05.2011 17:29
Изменить путь к БД Access Andrey85 БД в Delphi 9 14.11.2010 16:23
Есть БД на Access 2.0, нужно открыть в Access 2003 Spirit_33 Microsoft Office Access 1 23.07.2009 07:59
Delphy и Access.вводя инфу во вторичный файл Access, она отражалась в первом ADOTable Lev БД в Delphi 0 11.11.2007 12:14