现象:以下是我更新数据库使用的方法,目前现象是我没次改完后只能保存在内存里,不能真的更新数据库,当程序重新编译启动后原先的添加的数据又没了。注释:1.this.lbUser.Items.Count是我给数据库主键NameID设的值,以下都是这样,类型方面没有错;2."User"是一个用户表;3.da是OleDbDataAdapter类型的,已经和数据库相连。DataSet ds = new DataSet();
this.da.Fill(ds, "User");
DataTable dt = ds.Tables["User"];
DataRow dr = dt.NewRow();
dr["NameID"] = this.lbUser.Items.Count;
dr["BrithAddress"] = this.tbBirthAddress.Text;
dr["BrithTime"] = this.tbBirthTime.Text;
dr["Name"] = this.tbUser.Text;
dr["WorkAddress"] = this.tbWorkAddress.Text;
dr["Marriage"] = this.cbMarriage.Checked;
dt.Rows.Add(dr);
da.Update(ds, "User"); 

解决方案 »

  1.   

    dr.EndEdit(); //这里加这一句试试
    dt.Rows.Add(dr);
    da.Update(ds, "User"); 
      

  2.   

     DataAdapter的所有工作都会落实到一个Command上,比如查询就用SelectCommand。如果SelectCommand没有配置好,就不能执行这个工作。  
     相应的,如果要执行Update方法,就必须配置好UpdateCommand
    //必须要这句,才能用da.Update   
    OleDbCommandBuilder   cb=new   OleDbCommandBuilder(da);     
      

  3.   

    我是用VS2005里的工具箱添加的OleDbDataAdapter,刚才看了他默认配置的UpdateCommand 是什么,里面写了
    UPDATE    [User]
    SET              NameID = ?, Name = ?, WorkAddress = ?, BrithAddress = ?, BrithTime = ?, Marriage = ?
    WHERE     (NameID = ?) AND (? = 1 AND Name IS NULL OR
                          Name = ?) AND (? = 1 AND WorkAddress IS NULL OR
                          WorkAddress = ?) AND (? = 1 AND BrithAddress IS NULL OR
                          BrithAddress = ?) AND (? = 1 AND BrithTime IS NULL OR
                          BrithTime = ?) AND (? = 1 AND Marriage IS NULL OR
                          Marriage = ?)
    这个好像没什么
      

  4.   

    OleDbConnection   conn=new   OleDbConnection("Provider=SQLOLEDB.1;server=server;Database=db;uid=sa;pwd=;");  
      OleDbDataAdapter   da=new   OleDbDataAdapter("Select   *   From   Authors",conn);  
      OleDbCommandBuilder   cb=new   OleDbCommandBuilder(da);     //必须要这句,才能用da.Update  
      DataSet   ds=new   DataSet();  
      da.Fill(ds);  
      ds.Tables[0].Rows[0][1]="Change   Data";  
      da.Update(ds);   
      

  5.   

    报告打打还是不行我试了在构造函数里加和在成员函数里加都失败了,我添加数据用的是DataTable,我试了用
    da.Update(ds)和da.Update(dt)都没用
      

  6.   

    //试试:加上
    da.AcceptedChanged();
      

  7.   

    OleDbDataAdapter里没有AcceptedChanged(),在DataSet里才有,我试了DataSet但是还是不行
      

  8.   

    在da.Update(ds, "User"); 前再加一次这两句话:  OleDbDataAdapter   da=new   OleDbDataAdapter("Select   *   From   YOURTABLE",conn); //这句必须要  
      OleDbCommandBuilder   cb=new   OleDbCommandBuilder(da); 
      da.Update(ds, "User"); 
      

  9.   

    我已经要崩溃了,看了快24小时还没解决........,我附上完整代码各位大大帮忙看看下
    代码中的OleDbDataAdapter da的select,updata等都已经设置过没有问题,其次有人说加条OleDbDataAdapter da = new OleDbDataAdapter("SELECT * FROM User", oleDbConnection1);我已经试过了,不对,应为我加界面设计时添加了其中的查找方法,如果在这样赋值的话,在da里只有select,其他均为空using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Data.OleDb;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;namespace Address_Text
    {
        public partial class Form1 : Form
        {
            private DataSet ds;
            private DataTable dt;
            bool newFlag = false;        public Form1()
            {
                InitializeComponent();
                this.oleDbConnection1.Open();
                //OleDbDataAdapter da = new OleDbDataAdapter("SELECT * FROM User", oleDbConnection1);
                ds = new DataSet();
                this.da.Fill(ds, "User");
                dt = ds.Tables["User"];
            }        private void button3_Click(object sender, EventArgs e)
            {
                Application.Exit();
            }        private void Form1_Load(object sender, EventArgs e)
            {
                if (this.oleDbConnection1.State == ConnectionState.Closed)
                {
                    oleDbConnection1.Open();
                }
                int iRowCount = ds.Tables["User"].Rows.Count;
                this.lbUser.Items.Clear();
                if (iRowCount > 0)
                {
                    for (int i = 0; i < iRowCount; i++)
                    {
                        DataRow dr = dt.Rows[i];
                        string name = (string)dr[1].ToString();
                        this.lbUser.Items.Add(name);
                    }
                }
                oleDbConnection1.Close();
            }        private void lbUser_SelectedIndexChanged(object sender, EventArgs e)
            {
                this.tbUser.Clear();
                this.tbWorkAddress.Clear();
                this.tbBirthAddress.Clear();
                this.tbBirthTime.Clear();
                this.cbMarriage.Checked = false;
                if (this.lbUser.Items.Count > 0)
                {
                    DataRow dr = dt.Rows[this.lbUser.SelectedIndex];
                    this.tbUser.Text = (string)dr["Name"].ToString();
                    this.tbWorkAddress.Text = (string)dr["WorkAddress"].ToString();
                    this.tbBirthAddress.Text = (string)dr["BrithAddress"].ToString();
                    this.tbBirthTime.Text = (string)dr["BrithTime"].ToString();
                    this.cbMarriage.Checked = (bool)dr["Marriage"];
                }
            }        private void btChange_Click(object sender, EventArgs e)
            {
                this.tbBirthAddress.ReadOnly = false;
                this.tbBirthTime.ReadOnly = false;
                this.tbUser.ReadOnly = false;
                this.tbWorkAddress.ReadOnly = false; 
            }        private void btAdd_Click(object sender, EventArgs e)
            {
                this.tbBirthAddress.ReadOnly = false;
                this.tbBirthAddress.Clear();
                this.tbBirthTime.ReadOnly = false;
                this.tbBirthTime.Clear();
                this.tbUser.ReadOnly = false;
                this.tbUser.Clear();
                this.tbWorkAddress.ReadOnly = false;
                this.tbWorkAddress.Clear();
                newFlag = true;
            }        private void btSave_Click(object sender, EventArgs e)
            {
                if (newFlag)
                {
                    if (this.oleDbConnection1.State == ConnectionState.Closed)
                    {
                        oleDbConnection1.Open();
                    }
                    DataRow dr = dt.NewRow();
                    dr["NameID"] = this.lbUser.Items.Count;
                    dr["BrithAddress"] = this.tbBirthAddress.Text;
                    dr["BrithTime"] = this.tbBirthTime.Text;
                    dr["Name"] = this.tbUser.Text;
                    dr["WorkAddress"] = this.tbWorkAddress.Text;
                    dr["Marriage"] = this.cbMarriage.Checked;
                    dt.Rows.Add(dr);
                    //OleDbDataAdapter da = new OleDbDataAdapter("SELECT * FROM User", oleDbConnection1);
                    OleDbCommandBuilder cbs = new OleDbCommandBuilder(da);
                    //ds.AcceptChanges();
                    int errorNum = da.Update(ds, "User");
                    if (errorNum == 1)
                    {
                        MessageBox.Show("添加成功", "提示", MessageBoxButtons.OK);
                    }
                    else
                    {
                        MessageBox.Show("添加失败,请检查", "提示", MessageBoxButtons.OK);
                    }
                    //da.Fill(ds);
                    this.lbUser.Items.Add(this.tbUser.Text);
                }
                else
                {
                    if (this.oleDbConnection1.State == ConnectionState.Closed)
                    {
                        oleDbConnection1.Open();
                    }
                    int userSelect = this.lbUser.SelectedIndex;
                    DataRow dr = dt.Rows[userSelect];
                    dr["BrithAddress"] = this.tbBirthAddress.Text;
                    dr["BrithTime"] = this.tbBirthTime.Text;
                    dr["Name"] = this.tbUser.Text;
                    dr["WorkAddress"] = this.tbWorkAddress.Text;
                    dr["Marriage"] = this.cbMarriage.Checked;
                    ds.AcceptChanges();
                    da.Update(ds, "User");
                }
            }
        }
    }
      

  10.   

    现在的现象还是我提问的那样,命名也是一样已经看了快24小时了,我用VS,所以在添加OleDbDataAdapter 我已经对各种查询语句经行了设计,如果想注释掉的那样写会报错,应为这样写造成除了select不为null其他均为null。
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Data.OleDb;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;namespace Address_Text
    {
        public partial class Form1 : Form
        {
            private DataSet ds;
            private DataTable dt;
            bool newFlag = false;        public Form1()
            {
                InitializeComponent();
                this.oleDbConnection1.Open();
                //OleDbDataAdapter da = new OleDbDataAdapter("SELECT * FROM User", oleDbConnection1);
                ds = new DataSet();
                this.da.Fill(ds, "User");
                dt = ds.Tables["User"];
            }        private void button3_Click(object sender, EventArgs e)
            {
                Application.Exit();
            }        private void Form1_Load(object sender, EventArgs e)
            {
                if (this.oleDbConnection1.State == ConnectionState.Closed)
                {
                    oleDbConnection1.Open();
                }
                int iRowCount = ds.Tables["User"].Rows.Count;
                this.lbUser.Items.Clear();
                if (iRowCount > 0)
                {
                    for (int i = 0; i < iRowCount; i++)
                    {
                        DataRow dr = dt.Rows[i];
                        string name = (string)dr[1].ToString();
                        this.lbUser.Items.Add(name);
                    }
                }
                oleDbConnection1.Close();
            }        private void lbUser_SelectedIndexChanged(object sender, EventArgs e)
            {
                this.tbUser.Clear();
                this.tbWorkAddress.Clear();
                this.tbBirthAddress.Clear();
                this.tbBirthTime.Clear();
                this.cbMarriage.Checked = false;
                if (this.lbUser.Items.Count > 0)
                {
                    DataRow dr = dt.Rows[this.lbUser.SelectedIndex];
                    this.tbUser.Text = (string)dr["Name"].ToString();
                    this.tbWorkAddress.Text = (string)dr["WorkAddress"].ToString();
                    this.tbBirthAddress.Text = (string)dr["BrithAddress"].ToString();
                    this.tbBirthTime.Text = (string)dr["BrithTime"].ToString();
                    this.cbMarriage.Checked = (bool)dr["Marriage"];
                }
            }        private void btChange_Click(object sender, EventArgs e)
            {
                this.tbBirthAddress.ReadOnly = false;
                this.tbBirthTime.ReadOnly = false;
                this.tbUser.ReadOnly = false;
                this.tbWorkAddress.ReadOnly = false; 
            }        private void btAdd_Click(object sender, EventArgs e)
            {
                this.tbBirthAddress.ReadOnly = false;
                this.tbBirthAddress.Clear();
                this.tbBirthTime.ReadOnly = false;
                this.tbBirthTime.Clear();
                this.tbUser.ReadOnly = false;
                this.tbUser.Clear();
                this.tbWorkAddress.ReadOnly = false;
                this.tbWorkAddress.Clear();
                newFlag = true;
            }        private void btSave_Click(object sender, EventArgs e)
            {
                if (newFlag)
                {
                    if (this.oleDbConnection1.State == ConnectionState.Closed)
                    {
                        oleDbConnection1.Open();
                    }
                    DataRow dr = dt.NewRow();
                    dr["NameID"] = this.lbUser.Items.Count;
                    dr["BrithAddress"] = this.tbBirthAddress.Text;
                    dr["BrithTime"] = this.tbBirthTime.Text;
                    dr["Name"] = this.tbUser.Text;
                    dr["WorkAddress"] = this.tbWorkAddress.Text;
                    dr["Marriage"] = this.cbMarriage.Checked;
                    dt.Rows.Add(dr);
                    //OleDbDataAdapter da = new OleDbDataAdapter("SELECT * FROM User", oleDbConnection1);
                    OleDbCommandBuilder cbs = new OleDbCommandBuilder(da);
                    //ds.AcceptChanges();
                    int errorNum = da.Update(ds, "User");
                    if (errorNum == 1)
                    {
                        MessageBox.Show("添加成功", "提示", MessageBoxButtons.OK);
                    }
                    else
                    {
                        MessageBox.Show("添加失败,请检查", "提示", MessageBoxButtons.OK);
                    }
                    //da.Fill(ds);
                    this.lbUser.Items.Add(this.tbUser.Text);
                }
                else
                {
                    if (this.oleDbConnection1.State == ConnectionState.Closed)
                    {
                        oleDbConnection1.Open();
                    }
                    int userSelect = this.lbUser.SelectedIndex;
                    DataRow dr = dt.Rows[userSelect];
                    dr["BrithAddress"] = this.tbBirthAddress.Text;
                    dr["BrithTime"] = this.tbBirthTime.Text;
                    dr["Name"] = this.tbUser.Text;
                    dr["WorkAddress"] = this.tbWorkAddress.Text;
                    dr["Marriage"] = this.cbMarriage.Checked;
                    ds.AcceptChanges();
                    da.Update(ds, "User");
                }
            }
        }
    }
      

  11.   

    DataSet ds = new DataSet();
    da=new OleDbDataAdapter("select * from tableName",conn);////
    this.da.Fill(ds, "User");
    DataTable dt = ds.Tables["User"];
    DataRow dr = dt.NewRow();
    dr.BeginEdit();///////////
    dr["NameID"] = this.lbUser.Items.Count;
    dr["BrithAddress"] = this.tbBirthAddress.Text;
    dr["BrithTime"] = this.tbBirthTime.Text;
    dr["Name"] = this.tbUser.Text;
    dr["WorkAddress"] = this.tbWorkAddress.Text;
    dr["Marriage"] = this.cbMarriage.Checked;
    dr.EndEdit();//////////
    dt.Rows.Add(dr);
    OleDbCommandBuilder   cb=new   OleDbCommandBuilder(da);////////////
    da.Update(ds, "User"); 这样应可以的
      

  12.   

    在一个无意中解决了,原来当IDE生成目标文件时在其目录下还会复制一个源数据库,而我一直看的是在工程下的数据库,所以发现一直没有向数据库添加数据,有点像以前听的一个故事,有个老妇人烧了锅汤,但她觉得汤很淡,于是就加盐,但还是淡,于是又加盐,反复几次后最后发现,原来她尝的同一勺子里的汤,呵呵