C#system.io.filenotfoundexception

时间:2010-09-20 20:10:21

标签: c# database file-io sql-server-ce

我正在为我的工作创建一个应用程序来跟踪学年中的行为管理。为此,我显然需要一个数据库。我构建了程序,以便在打开时检查数据库是否存在,如果不存在,则创建一个,并输入模式。这在我的开发计算机上完美运行,但是当我使用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 个答案:

答案 0 :(得分:2)

  

if(!File.Exists(“chart.sdf”))

您似乎想要在与程序相同的目录中创建数据库。是的,这将适用于你的开发机器,但这不适用于普通机器。典型的安装目录(c:\ program files \ etc)不允许对文件进行写访问。

您需要使用Environment.GetFolderPath()来获取可以写入的ApplicationData目录。

让安装程序创建appdata目录并在其中复制初始.sdf文件通常要容易得多并且不容易出错。尽管Express版本不支持安装项目。有一个问题,黑客代码解决Express版本的限制正在打败产品许可证的价格。你离这儿很近。

答案 1 :(得分:0)

确保已部署所有需要的dql Sql Server Compact。我不确定你在安装.NET框架时会得到它们。需要的dll是:

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

您可以在此MSDN页面上找到有关各种版本数据库引擎的Sql Compact Deployment的更多详细信息。