3

您好我有一个名为 Database1.sdf 的本地数据库。我正在使用以下代码访问它以将一些数据插入表中:

public string DoLocalDbCmd(string Command)
        {
            int NumeroAffetto;
            string ConnString = @"Data Source=|DataDirectory|\Database1.sdf";
            SqlCeConnection Conn = new SqlCeConnection(ConnString);
            SqlCeCommand Comando = new SqlCeCommand(Command, Conn);
            Comando.CommandType = System.Data.CommandType.Text;
            try
            {
                Comando.Connection.Open();
                NumeroAffetto = Comando.ExecuteNonQuery();
                return NumeroAffetto.ToString();
            }
            catch (Exception ex)
            {
                return ex.Message;
            }
            finally
            {
                Comando.Connection.Close();
            }
        }

private void button1_Click(object sender, EventArgs e)
        {
            DoLocalDbCmd cmd = new DoLocalDbCmd();

            string cmdex = cmd.RunSqlCmd("insert into TBL_PROVA (BELLO) VALUES ('VERO')");

            MessageBox.Show(cmdex);
        }

代码的执行没有错误,我检索到受影响的行数 = 1。

但是在我查询数据库之后没有插入任何行。

有人可以向我建议有什么问题吗?

先感谢您

皮尔卡洛

4

1 回答 1

3

当这些条件全部或部分存在于您的项目中时,这是一种常见的情况。

  • 您有一个带有DataDirectory替换字符串的连接字符串。
  • 您在服务器资源管理器上有一个指向项目目录中的 SDF 文件的连接。
  • 您在项目项中列出的 SDF 文件上Copy To Output Directory设置了属性。Copy Always

当您在 VS 的 IDE 中运行程序时,项目文件夹中的 SDF 文件将按照设置复制到输出目录 (BIN\DEBUG) Copy To Output Directory,这可能导致最终已经存在于 BIN\DEBUG 中的文件被覆盖.
您运行代码并将数据正确插入到 BIN\DEBUG 文件夹中的文件中。
您停止您的程序并使用服务器资源管理器检查记录是否存在,但您没有看到任何新记录,因为您正在查看项目文件夹中的文件。
您开始一个新的调试会话,并且 BIN\DEBUG 中的文件再次被空文件覆盖。

所以...更改属性Copy to the Output DirectoryCopy Never停止此复制,更改服务器资源管理器中的连接以指向 BIN\DEBUG 文件夹中的数据库(或添加另一个保留旧的用于模式更改和新的以验证您的DML 操作)

于 2013-09-09T11:38:04.333 回答