昨晚给一个小朋友看了一个小程序,程序很简单是用VS2005+C# 的windowsform
程序,功能是对药品信息进行添加、删除、修改使用access做后台数据库。
//////////下面是删除部分
private void 删除DToolStripMenuItem_Click(object sender, EventArgs e)
{
try
{
if (txtyao.Text == "")
{
MessageBox.Show("yaoname can't nothing", "提示",
MessageBoxButtons.OK, MessageBoxIcon.Question);
}
//在删除的时候我们将“药名”作为条件
String destr = "delete from tb2 where yaoname='" +
txtyao.Text + "'";
cmd = new OleDbCommand(destr, con);
if (con.State == ConnectionState.Closed)
con.Open();
int ss=cmd.ExecuteNonQuery();
con.Close();
if (ss > 0)
MessageBox.Show("OK");
else
MessageBox.Show("失败!");
ada = new OleDbDataAdapter("select * from tb2", con);
DataSet da = new DataSet();
ada.Fill(da, "tb2");
DataTable dt = da.Tables[0];
dataGrid1.DataSource = dt;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message.ToString());
}
}
粗略的查看了这段代码没有发现问题在前台我们也能看到dataGrid1里头的数据减少了
,可是当我们停止运行重启程序的时候发现原来我删除的记录又出现在dataGrid1中,
单步调试也发现程序执行正常。程序没有问题,想来可能目标数据库的问题了,打开项
目文件夹。发现“bin”中发现了跟后台数据库相同名称的数据库(这句话有点绕)。
多次调试查看数据库我发现我每次只是修改了bin里头的数据库 而我的目标数据库确没
有发现变化,为什么出现这种情况了,想了好久才知道我们在每次编译的时候连同数据
库一起编译了所有才会将修改后的数据库覆盖,感觉数据库没有变化。找到问题的所在
了解决方法就好办了:打开解决方案管理器找到目标数据库选择“从项目中排除”。在
将目标数据库放到bin目录下,问题解决。
思考:有的时候越是简单的问题越容易钻牛角尖,像这问题我开始一直怀疑是我的代码
写的问题,还到网上找了很久,听了众家的分说,都没解决。不过欣慰的是让我发现程
序修改bin里头数据库内容。
感觉奇怪记得以前写这样程序的时候都没出现这种状况。作者可能在设置解决方
案时候将数据库无意间包括到项目中。而按下F5时项目开始编译所以出现了每次程序运
行都会对数据库进行编译,其结果是将原来的数据库覆盖。
浙公网安备 33010602011771号