我从一个数据库A中查询出一个数据集ds,然后将这个DS添加到另外一个数据库B中去,但是B数据库中没有更新,谁知道什么原因,两个表的结构是一样的,
查询出DS:
public static DataSet cedataset(string sql)
        {
            DataSet ds = new DataSet();
            try
            {
                using (SqlCeConnection con = new SqlCeConnection(path))
                {
                    con.Open();
                    SqlCeDataAdapter adapter = new SqlCeDataAdapter(sql, con);
                    adapter.Fill(ds);
                    con.Close();
                    return ds;
                }
            }
            catch
            {
                ds = null;
                return ds;
            }
        }将DS插入到另外一个数据库中去:(这里这个SQL语句和上面的查询SQL语句是一样的)
public static bool updatadb(DataSet ds,string sql,string tablename)
        {
            
            try
            {                SqlConnection con = new SqlConnection(pub.strConn());
                con.Open();
                SqlDataAdapter da = new SqlDataAdapter(sql, con);
                SqlCommandBuilder sqlcmdbuilder = new SqlCommandBuilder(da);
                da.Update(ds);//如果这里加了tablename提示找不到这个表
                 ds.Tables[0].AcceptChanges();//ds.AcceptChanges()也试过
                con.Close();
                return true;
                
            }
            catch(Exception ex)
            {
               return false;
            }
        }谁知道这种是什么原因??帮忙解答下,急

解决方案 »

  1.   

    将一个DATASET全部插入到另外一个数据库的一个表中去
      

  2.   

    你可以在同一个链接里操作呀!表结构又一样。
     insert into 数据库A.dbo.表 
      select * from 数据库B.dbo.表 
      

  3.   

    其实你可以直接用SQLSERVER自带的数据迁移工具进行复制,或者用BCP命令复制,都是很快的。
    一定要用DataTable进行复制的话,必须先改变DataTable中各行的Rowstatus才行。
            public static bool updatadb(DataTable dt)
            {
                try
                {
                    SqlConnection con = new SqlConnection(pub.strConn());
                    con.Open();
                    SqlDataAdapter da = new SqlDataAdapter();
                    da.InsertCommand = con.CreateCommand();
                    da.InsertCommand.CommandText = "INSERT INTO XXX VALUES(XXX)";//自己写insert语句,别告诉我你不会写SQL。
                    //有几个列,添加几个参数,注意参数名和列名书写正确。
                    da.InsertCommand.Parameters.Add(new SqlParameter("@参数1", SqlDbType.VarChar,20,"dt中对应的列名"));
                    //END
                    da.Update(dt);
                    con.Close();
                    return true;
                }
                catch (Exception ex)
                {
                    return false;
                }
            }
      

  4.   

    修改Rowstatus的代码:
            public static void changeRowStatus(DataTable dt)
            {
                //请确保是刚从数据库中查询出来的DataTable,未经过任何改动,否则不允许删改行状态。
                foreach (DataRow dr in dt.Rows)
                {
                    dr.SetAdded();
                }
            }
      

  5.   

    其实用SqlBulkCopy也可以,只要保证2表的结构完全一样,用SqlBulkCopy会更快,无条件插入。
      

  6.   

    比较悲剧,楼上数那个适用于.net 2.0 而我这个是在.NET CF 2.0上