1

当我插入数据时,我可以在 DATAGRIDVIEW 中读取它们,但是当从数据库资源管理器中读取 Table1 时,我无法在 Table1 中找到存储的数据,此外,在那之后我丢失了 DATAGRIDVIEW 的数据。

将数据发送到数据库是否正确?

conn.ConnectionString =
   "Persist Security Info = False; Data Source = 'table1.sdf';" +
   "Password = '....'; File Mode = 'shared read'; " +
   "Max Database Size = 256; Max Buffer Size = 1024";

conn.Open();
SqlCeCommand cmd = new SqlCeCommand("INSERT INTO Tp_Inr_Dosage (date, Tp, Inr, LastDosage, NewDosage, pathology_level,  Pathology, idpatient) values( '" + DateTime.Now.ToString() + "', " + tpTextBox.Text.Replace(",", ".") + ", " + inrTextBox.Text.Replace(",", ".") + " ," + lastDosageTextBox.Text.Replace(",", ".") + ", " + newDosageTextBox.Text.Replace(",", ".") + " ," + pathologyComboBox.SelectedIndex + " , '" + pathologyComboBox.SelectedItem + "', '" + patient + "' )", conn);

cmd.ExecuteNonQuery();
conn.Close();

就像我的数据只进入缓冲区,它永远不会到达数据库

4

3 回答 3

1

在 IDE 中,您的项目结构中可能有一个数据库文件(sdf、mdf 或类似文件);也许在MyProject\table1.sdf,或者也许在MyProject\Data\table1.sdf。当您使用 IDE 工具查看数据库时,这是您正在查看的文件

但是,当您构建项目时,项目文件将被写入(复制)到构建位置 - 类似于:

  • MyProject\bin\debug\table1.sdf
  • MyProject\bin\debug\Data\table1.sdf
  • MyProject\bin\release\table1.sdf
  • MyProject\bin\release\Data\table1.sdf

当您的应用程序运行时,它正在编辑构建位置中的文件。您对数据所做的任何更改仅在此文件副本中可见。所以:如果您使用任何数据库查看工具,您需要绝对确保您查看的是构建位置中的文件,而不是原始项目位置中的文件。

于 2013-11-14T08:27:51.803 回答
0

一种更优雅的插入方式是:

string query = "INSERT INTO Tp_Inr_Dosage (date, Tp, Inr, LastDosage, NewDosage, pathology_level,  Pathology, idpatient) VALUES (@date, @Tp, @InRowChangingEventException, @LastDosage, @NewDosage, @pathology_level, @Pathology, @idpatient)";

SqlCeCommand cmd = new SqlCeCommand(query);

cmd.CommandType = CommandType.Text;
cmd.Parameters.AddWithValue(new SqlParameter("@date", DateTime.Now));
cmd.Parameters.AddWithValue(new SqlParameter("@Tp", string.Empty));
cmd.Parameters.AddWithValue(new SqlParameter("@InRowChangingEventException", string.Empty));
// etc.

cmd.ExecuteNonQuery();
于 2013-11-14T08:11:35.287 回答
0

我发现 sqlCommands 往往会默默地失败:将进程封装在一个通用的 try/catch 块中,以查看它未能正确执行的操作。就像是:

try
{
    conn.Open();
    SqlCeCommand cmd = new SqlCeCommand(ParameterisedSQlQueryText, conn);
    //Put your parameters in here
    cmd.ExecuteNonQuery();
}
catch (Exception ex) {MessageBox.Show(ex.Message);}
finally {conn.Close();}

前消息通常是在这些情况下出现问题的一个很好的指标。

于 2013-11-14T08:18:07.937 回答