在表格中插入数据

时间:2013-11-14 07:57:34

标签: c# sql datagridview

当我插入数据时,我可以在DATAGRIDVIEW中读取它们,但是当从databse explorer读取时,我无法在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();

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

3 个答案:

答案 0 :(得分: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

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

答案 1 :(得分: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();

答案 2 :(得分: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();}

ex message通常是这些案例中出错的一个很好的指标。