当我插入数据时,我可以在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();
就像我的数据只进入缓冲区,它永远不会到达数据库
答案 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通常是这些案例中出错的一个很好的指标。