2010-09-20 2 views
1

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

 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; 
    } 

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

+0

Установлены ли минимальные системные требования? Например, .NET framework? – jsmith

+0

В коде нет ничего, что должно вызывать 'FileNotFoundException'. Как упоминалось в jsmith, это может быть внешний файл (т. Е. .NET framework), который отсутствует. –

+0

Я установил .NET framework 4, мне нужна новая сборка? Первоначально я говорил мне, что мне нужна платформа .NET 4.3, но как только я установил 4, не сказал сборки, он запустил бы программу, но это дало ошибку. –

ответ

0

Убедитесь, что вы использовали все серверные компакт-диски dll Sql. Я не уверен, что вы их получите при установке .NET framework. Длл Необходимы:

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

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

2

если (! File.Exists ("chart.sdf"))

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

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

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