我写了一个控制台的小例题,主要是对一个数据表进行操作,为什么修改的数据可以提交到数据库表中,而新增加的数据却提交不上?大家一般都怎么写啊?请熟悉的指点下,或发一个小例子给我([email protected]),先谢谢了
代码如下:using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.SqlClient;namespace ConsoleApplication2
{
    class Program
    {
        SqlConnection Conn;
        /// <summary>
        /// 打开数据库连接
        /// </summary>
        public void OpenDataBase()
        {
            Conn = new SqlConnection("Data Source=.; database=HZYC; User id=sa; pwd=;");
            Conn.Open();
        }
        /// <summary>
        /// 数据操作
        /// </summary>
        public void Test_OperatData()
        {
            Console.WriteLine("根据Select 条件筛选记录 并修改”部门名称“结果:");
            OpenDataBase();
            SqlDataAdapter da = new SqlDataAdapter("select * from Base_Department", Conn);
            DataSet ds = new DataSet("Depart");
            da.Fill(ds, "Depart");
            SqlCommandBuilder builder = new SqlCommandBuilder(da);
            DataRow[] fdr = ds.Tables["Depart"].Select("DepartName=\'总经办2\'");
            if (fdr.Length <= 0)
            {
                Console.WriteLine("没有找到匹配的行");
            }
            else
            {
                Console.WriteLine("查找到匹配的行");
                fdr[0].BeginEdit();
                fdr[0]["DepartName"] = "总经办22";
                fdr[0].EndEdit();
                Console.WriteLine("修改前的部门名称:{0}", fdr[0]["DepartName", DataRowVersion.Original]);
                Console.WriteLine("修改后的部门名称:{0}", fdr[0]["DepartName", DataRowVersion.Current]);
            }            //新增一行
            /*DataRow newrow = ds.Tables["Depart"].NewRow();
            newrow["ID"] = 100;
            newrow["DepartName"] = "新增部门";
            ds.Tables["Depart"].AcceptChanges();*/
            Console.WriteLine("显示修改后的数据:");
            foreach (DataRow dr in ds.Tables["Depart"].Rows)
            {
                Console.WriteLine("\t{0}\t{1}", dr["DepartName"].ToString(), dr["ID"].ToString());
            }            da.Update(ds.Tables["Depart"]);//提交回数据库
            Console.ReadLine();
        }
        /// <summary>
        /// 主程序
        /// </summary>
        /// <param name="args"></param>
        static void Main(string[] args)
        {
            //DataReader例题
            Program p = new Program();
            p.Test_OperatData();
        }
    }
}

解决方案 »

  1.   

                /*DataRow newrow = ds.Tables["Depart"].NewRow();
                newrow["ID"] = 100;
                newrow["DepartName"] = "新增部门";
                ds.Tables["Depart"].AcceptChanges();*/ 
    被注释掉了,你怎么新加啊?
      

  2.   


    DataRow newrow = ds.Tables["Depart"].NewRow(); 
    newrow["ID"] = 100; 
    newrow["DepartName"] = "新增部门"; 
    ds.Tables["Depart"].Rows.Add(newrow); //这个地方你还没有加进去呢。
    ds.Tables["Depart"].AcceptChanges();
    Console.WriteLine("显示修改后的数据:"); 
      

  3.   

    是不是因为没有加
    ds.Tables["Depart"].Rows.Add(newrow); 
    的问题
      

  4.   

    ds.Table["Depart"].NewRow();上执行的增加行,还要另外再
    ds.Tables["Depart"].Rows.Add(newrow); 吗?
    不太明白啊。
    我初学者
      

  5.   

    两句的意思不一样第一句DataRow newrow = ds.Tables["Depart"].NewRow(); 是生成临时表dataSet的DataTable(Depart)中的新行,也就是说它只是一个“行”;  或者说,你用DataRow定义的一个新行.第二句ds.Tables["Depart"].Rows.Add(newrow); 是把这个新“行”加到DataTable(Depart)表上;或者说,把这个行加到这个表的“行集合(Rows)”中了。
      

  6.   

    删除了这么行代码:(ds.Tables["Depart"].AcceptChanges();)
    现在提交成功了。
    为什么加上这一行的时候反而提交会不成功?
      

  7.   

    ds.Tables["Depart"].AcceptChanges()是提交自上次调用 AcceptChanges 以来对该表进行的所有更改。 
    你就调用了一次,就不存在提交了,还是好好看看MSDN就可以了,其实这句话本来是不需要的。调用 AcceptChanges 时,任何仍处于编辑模式的 DataRow 对象将成功结束其编辑。DataRowState 也发生更改:所有 Added 和 Modified 行成为 Unchanged;Deleted 行被移除。
    在您尝试使用 DbDataAdapter.Update 方法更新 DataSet 之后,通常会对 DataTable 调用 AcceptChanges 方法。