我使用dataset向sqlserver2000插入都没有问题,但是同样的代码使用access就不行啦
代码如下 //说明数据集
            DataSet1.recordDataTable recordDataTable = new DataSet1.recordDataTable();
            //说明数据集的行对象。
            DataSet1.recordRow recordRow = (DataSet1.recordRow)recordDataTable.NewrecordRow();
            recordTableAdapter rta = new recordTableAdapter();
            //将数据写入行对象
            recordRow.name = txbId.Text;
            recordRow.record_id =Convert.ToInt32(txbId.Text);
            recordRow.idcard = txbidcard.Text;
            recordRow.idleness = txbIdleness.Text;
            recordRow.sex = cbbSex.Text;
            recordRow.xuhao =Convert.ToInt32( txbXuhao.Text);
            recordRow.insurance = txbXuhao.Text;
            //行对象加入数据集
            recordDataTable.AddrecordRow(recordRow);
            //更新数据库
            rta.Update(recordDataTable);
            MessageBox.Show("保存成功");
系统也不会报错,而且其他页面的dataGridView绑定这个datset后,可以看见新插入的数据是存在的。但是就是数据库当中没有更新,说明
 rta.Update(recordDataTable);
没有成功。
为什么呢?同样的代码用sqlserver就可以?有哪位朋友知道望不吝赐教

解决方案 »

  1.   

    呵呵,没错.代码没问题
     因为不同的数据库 连接对象不一样
     SQLSERVER 你看前面的开头 你再找下  替换掉就OK的
     
      

  2.   

    插入sqlsever的方法和access的方法是一样的  只是它们在连接数据库的时候是不一样的,你用sqlsever(上面的代码)是不行的`因为它根本就连接不上access的库,access的是 OleDbConnection con=new  OleDbConnection();连接字符串你可以用access往外导下就出来了 
      

  3.   

    我用的是dataset,查询没有问题。所以数据库的链接是正常的。问题出在插入。
      

  4.   

    你在Update()上面加这行看看行不行.
    DataSet1.AcceptChanges();
      

  5.   

     private void button1_Click(object sender, EventArgs e)
            {
                //说明数据集
                DataSet1.recordDataTable recordDataTable = new DataSet1.recordDataTable();
                //说明数据集的行对象。
                DataSet1.recordRow recordRow = (DataSet1.recordRow)recordDataTable.NewrecordRow();
                recordTableAdapter rta = new recordTableAdapter();
                //将数据写入行对象
                recordRow.name = txbId.Text;
                recordRow.record_id =Convert.ToInt32(txbId.Text);
                recordRow.idcard = txbidcard.Text;
                recordRow.idleness = txbIdleness.Text;
                recordRow.sex = cbbSex.Text;
                recordRow.xuhao =Convert.ToInt32( txbXuhao.Text);
                recordRow.insurance = txbXuhao.Text;
                //行对象加入数据集
                recordDataTable.AcceptChanges();
                recordDataTable.AddrecordRow(recordRow);
                //更新数据库
                try
                {
                    rta.Update(recordDataTable);
                    recordDataTable.AcceptChanges();
                    MessageBox.Show("保存成功");
                }
                catch (Exception)
                {
                     MessageBox.Show("保存异常");
                   
                }
                dataGridView1.DataSource = rta.GetData();//在dataGridView中绑定表
               
            }最后一句是从数据库总查询出所有记录,然后绑定dataGridView,在dataGridView中已经可以显示所有记录,包括刚刚新增的记录。
    但是查看数据库就没有这些新增记录。很怪
      

  6.   

    我知道为什么会这样啦。系统会自动copy一个数据到\bin\Debug目录下,数据库更新时会更新这个数据库,但是关闭系统后,这个数据库的更新数据就消失了。为什么会这样呢?
      

  7.   

    问题找到。闪分当我们新建一个access数据连接,有两种方式:
    一种直接从数据源(也就是dataset的选项卡)新建,这种方式在新建的时间会同时生成dataset。
    另一种在服务器资源管理器中新建,先建立一个数据库连接,然后手工生产一个dataset,在手动将数据库连接中的表引入dataset中。无论哪种方式,生成dataset时系统会提示是否将该数据库文件copy到项目中。如果选择是,则将该【数据库文件】copy到项目根目录和\bin\Debug两个地方,其中\bin\Debug目录下的【数据库文件】程序运行时都对它进行读写,它与工程中的dataset一一对应。而工程的【数据库连接】是与根目录的【数据库文件】对应的。如果我们要改变数据库表结构或者增删表,就要对根目录的表进行修改,这样工程的【数据库连接】中的表就会同步更新,然后我们在将数据库连接中的新表引入dataset,最后\bin\Debug下的【数据库文件】也就会同步更改。\bin\Debug的【数据库文件】中的数据也和和根目录下的保存一致。但是反过来,\bin\Debug下的【数据库文件】有改变根目录却不会同步变化由于上述原因,所以在vs中运行程序,则对表的更新不能持久,当我们再次在vs中运行程序并执行更新后,上次更新的数据都将消失(\bin\Debug【数据文件】与根目录【数据文件】同步)。但是直接运行\bin\Debug目录下的exe文件就没有这个问题。如果选择不将【数据库文件】copy到项目中,那么所有的更新都将针对源数据库。无论哪种方式生成的dataset,数据库的连接字符串都写在app.config文件中。如果我们需要更改数据库文件的位置更改这个连接字符串即可。