C # system.io.filenotfoundexception - PullRequest
       2

C # system.io.filenotfoundexception

1 голос
/ 21 сентября 2010

Я создаю приложение для своей работы, чтобы отслеживать управление поведением в течение учебного года. Для этого мне явно нужна была база данных. Я построил программу так, чтобы при открытии она проверяла, существует ли база данных, а если нет, то создает ее и вводит схему. Это прекрасно работает на моем компьютере разработчика, но когда я переключаю его на компьютер с использованием Windows XP, он выдает ошибку «system.io.filenotfoundexception». Я не могу понять, почему он не будет создавать базу данных. Я использую Visual C # 2010 Express. А база данных сделана в sql server ce.

        if (!File.Exists("chart.sdf"))//Checks if file is already in existance when app is opened
        {
            dbCreated = createDb();//If there is no database, creates one
        }


public bool createDb()//Creates the database if needed
    {
        bool success = true;
        //Holds sql schema for the table
        string[] tableCreateArr ={"create table childNameId"
                 + "(childId INT IDENTITY PRIMARY KEY, "
                 + "childFName nchar(40), "
                 + "childLName nchar(40));",
                "create table leaderNameId"
                + "(leaderId INT IDENTITY PRIMARY KEY, "
                + "leaderFName nchar(40), "
                + "leaderLName nchar(40));", 
                "create table TagPulledId"
                 + "(tagId INT IDENTITY PRIMARY KEY, "
                 + "childId INT, "
                 + "leaderId INT, "
                 + "day TINYINT, "
                 + "month TINYINT, "
                 + "year INT);",
                 "CREATE TABLE tagInfo"
                 + "(tagId INT, "
                 + "color nchar(10), "
                 + "description ntext)"};

        SqlCeEngine dbCreate = new SqlCeEngine(connectString());  // creates the database obj

        dbCreate.CreateDatabase(); // creates the database file
        SqlCeConnection tempConnect = new SqlCeConnection(connectString());//Connects to the new database
        SqlCeCommand objCmd = new SqlCeCommand();//Creates an sql command obj
        tempConnect.Open(); // opens the connection
        objCmd.Connection = tempConnect; //Connects the command obj

        foreach (string strCmd in tableCreateArr)//Iterates throught he sql schema to create the tables
        {
            try
            {
                objCmd.CommandText = strCmd; //sets the CommandText to the next schema entry in the array
                objCmd.ExecuteNonQuery(); //Executes the create query
            }
            catch (SqlCeException sqlError)
            {
                MessageBox.Show(sqlError.Message, "SQL Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                success = false;
            }
        }
        tempConnect.Close();
        return success;
    }

Я не могу понять, почему приложение не создает базу данных, похоже, что оно работает на некоторых компьютерах, но не работает на других. Любая помощь будет отличной! Спасибо.

Ответы [ 2 ]

2 голосов
/ 21 сентября 2010

if (! File.Exists ("chart.sdf"))

Вы, похоже, хотите создать базу данных в том же каталоге, что и ваша программа.Да, это будет работать на вашей машине, но не будет работать на обычной машине.Типичный установочный каталог (c: \ program files \ etc) не разрешает доступ на запись к файлам.

Вам потребуется использовать Environment.GetFolderPath (), чтобы получить каталог ApplicationData, в который вы можете писать.

Часто гораздо проще и с меньшими ошибками позволить установщику создать каталог appdata и скопировать туда исходный файл .sdf.Хотя проекты установки не поддерживаются Express Edition.Наступает момент, когда взлом кода для обхода ограничений Express Edition побеждает цену лицензии на продукт.Вы здесь довольно близко.

0 голосов
/ 21 сентября 2010

Убедитесь, что вы развернули все необходимые DLL-серверные компакт-диски SQL Server.Я не уверен, что вы получите их при установке .NET Framework.Нужные dll:

  • sqlceca35.dll
  • sqlcecompact35.dll
  • sqlceer35EN.dll
  • sqlceme35.dll
  • sqlceoledb35.dll
  • sqlceqp35.dll
  • sqlcese35.dll

Более подробную информацию можно найти на этой странице MSDN о Sql Compact Deployment дляразличные версии движка базы данных.

...