你可以不用编程序的,用数据库自带工具,从一个数据库导出,再用另一个
数据库导入。我常在sql,Access中导。

解决方案 »

  1.   

    回复人: zhengguoc(爱之海洋) ( ) 信誉:100  2003-12-06 18:26:00  得分:0 
     
     
      你可以不用编程序的,用数据库自带工具,从一个数据库导出,再用另一个
    数据库导入。我常在sql,Access中导。
      
     
    ------------------------
    我也是,
      

  2.   

    两个数据库之间导数据,20多个表,有没有好的解决方案啊,不要告诉我要写20个select和insert吧??星期一就要验收了,怎么办啊同上,数据库结构是完全一样的,就是导数据,如果解决,急死了,最好有实例----》至于这个问题,你可以做个简单的小工具(当然,编程实现,如果不编程,可以用楼上的解决方法)提供思路
    (循环)1:从一个配置文件中读入表的名称
    2:从源库中读出表的结构DataSet.Tables.Columns里面有所有的你想知道的信息,什么改列的数据类型,大小,等等
    3:对这个表的每一行生成一个Insert语句,如果是字符型的和日期型的要适当的调整格式(加’号);
    4:连接到目标库执行上面产生的sql语句
    循环直到表处理完毕
      

  3.   

    如果表之间有关系,注意先导入主表后导入从表
    强烈建议,自己动手写一下,明天一个上午绝对来得及,写一遍之后,你就会对DataSet之类的东西理解的深一些:)
    5个月前我刚工作的时候,老板就给我做这个,和你这个一摸一样几乎,呵呵,当时我都不怎么会编程序,晕死
      

  4.   

    源程序因为跳了下槽,没有了:(
    不过很简单的
    GOOD LUCK
      

  5.   

    上面的第3步就是一个Foreach循环就搞定了
      

  6.   

    brightheroes(闭关)兄提供的思路不错,学习收藏了。
    不过对于数据量巨大的情况下我不看好哦。:D
      

  7.   

    brightheroes(闭关) 给个QQ,我把我的代码发一份
    客户要求用程序实现,我还没没明白brightheroes的意思,你的意思不就是说把20个表用insert语句吗???
      

  8.   

    brightheroes(闭关) 给个QQ啊
    能不能找个简单点的代码看看啊,比如就一个表的操作
      

  9.   

    我这里简单的描述一下首先建立和源库的连接
    select * from table1 ,填充到dataset中然后
    string strSqlHead = "insert into table1(";
    foreach(DataColumn c in ds.Tables["table1"].DataColumns)
    {
       strSql += c.ColunsName(什么属性我忘了,就是列名);
    }
    strSqlHead += ")value(";
    这样,就生成了一个表头
    然后呢,对每一行生成一个sql语句
    ArrayList arrayList = new ArrayList();
    string insertStr = strSql ;
    int i = 0;
    froeach(DataRow dr in ds.Tables["table1"].Rows)
    {
      foreach(DataColumns c in dr.Columns)
       if(ds.Tables["table1"].Columns[i].DataType = "System.string")
       {
          //如果是字符串,就要加上单引号,日期也一样
        insertStr += "'"  + dr[i].ToString() + "'";
       } 
       else
       {
         insertStr += dr[i].ToString() ;
       }   
    }
      

  10.   

    这个循环最后
    arrayList.Add(insertStr);这样,当你的循环结束之后,你的ArrayList里面就有了对应于这个表的insert语句
    你就连接到目标库,执行这个arrayList里面的sql语句就可以了
      

  11.   

    你用的是什么数据库,如果是SQL Server ,如果两个库中表结构相同,直接导入就可以,没有什么难度,我常这样做的
      

  12.   

    简单的思路就是这样
    当然,这肯定能实现你的目的
    至于说更好的办法一定有,可惜我不知道:(你就自己看着写一下,很easy的
      

  13.   

    不好意思,我上面的代码有问题froeach(DataRow dr in ds.Tables["table1"].Rows)
    {
      int i = 0 放到这里,就是纪录这一行有多少列
      foreach(DataColumns c in dr.Columns)
       if(ds.Tables["table1"].Columns[i].DataType = "System.string")
       {
          //如果是字符串,就要加上单引号,日期也一样
        insertStr += "'"  + dr[i].ToString() + "'";
       } 
       else
       {
         insertStr += dr[i].ToString() ;
       }   
    }
    我们现在做的这个项目就是用这个方法自动生成的Sql语句
    我的MSN是[email protected]
    有问题联系我
      

  14.   

    我解决了,不过跟你的思路是一样的,方法差不多,你看看吧,相互学习嘛^_^
    你要是想看,占到vs.net中看,要不不好看
    /********************************************
    * 过程名:DataTrance
    * 功能  :实现接口机与外网的数据传送
    ******************************************
    */
    private bool DateTrance()
    {
    try
    {
    strBeginDate=this.txtStartTime.Text.ToString();
    strEndDate=this.txtEndTime.Text.ToString(); DataSet ds=new DataSet();
    for(int i=0;i<this.lstRight.Items.Count;i++)
    {
    string sourceTable="strSourceTable"+i;
    string deTable="strDeTable"+i;
    DataTable dtSource=new DataTable(sourceTable);
    DataTable dtDe=new DataTable(deTable);

    switch(this.lstRight.Items[i].ToString())
    {
    case "有税表":
    strTableName="tdz00003";
    break;
    case "无税表":
    strTableName="tdz00004";
    break;
    case "企业所得税表":
    strTableName="TDZ00005";
    break;
    case "损益表":
    strTableName="TDZ00006";
    break;
    case "利润分配表":
    strTableName="TDZ00007";
    break;
    case "补充资料表":
    strTableName="TDZ00008";
    break;
    case "资产负债表":
    strTableName="TDZ00009";
    break;
    case "个人独资和合伙投资各所税表":
    strTableName="TDZ00010";
    break;
    case "土地增值税表":
    strTableName="TDZ00011";
    break;
    case "扣缴个人所得税表(一)":
    strTableName="TDZ00012";
    break;
    case "扣缴个人所得税表(二)":
    strTableName="TDZ00013";
    break;
    case "扣缴个人所得税表(三)":
    strTableName="TDZ00014";
    break;
    case "纳税申报表房产税附列资料":
    strTableName="TDZ00015";
    break;
    case "纳税申报表土地税附列资料":
    strTableName="TDZ00016";
    break;
    case "纳税申报表印花税附列资料":
    strTableName="TDZ00017";
    break;
    case "纳税申报表营业税附列资料":
    strTableName="TDZ00018";
    break;
    case "纳税申报表土地增值税附列资料":
    strTableName="TDZ00019";
    break;
    case "纳税申报表印花税票领用存情况":
    strTableName="TDZ00020";
    break;
    case "外籍营业税申报表":
    strTableName="TDZ00021W";
    break;
    case "外籍个人所得税月份申报表":
    strTableName="TDZ00022W";
    break;
    case "外籍扣缴个人所得税报告表":
    strTableName="TDZ00023W";
    break;
    }//end switch if(ReadWriteData(strTableName,sourceTable,deTable)==false)
    {
    return false;
    }//end if

    }//end for
    ds.Clear();
    Ado.adoClass.F_ConnClose(Ado.adoClass.objConnection1);
    return true;
    }
    catch(System.Exception err)
    {
    MessageBox.Show(err.Message);
    return false;
    }


    }
      

  15.   

    /********************************************
    * 过程名:getColumnsContentsByTable
    * 功能  :返回表中的字段属性
    ******************************************
    */
    private SqlDataReader getColumnsContentsByTable(string strTemp,SqlConnection objConn)
    {
    StringBuilder sbSQL = new StringBuilder(); //SQL语句
    try
    {
    sbSQL.Append("select ");
    sbSQL.Append("b.name,"); //列名或过程参数的名称
    sbSQL.Append("c.name "); //数据类型名称
    sbSQL.Append("as ");
    sbSQL.Append("typeName,"); //别名
    sbSQL.Append("case ");
    sbSQL.Append("when ");
    sbSQL.Append("b.xtype=231 "); //systypes 中的物理存储类型
    sbSQL.Append("then ");
    sbSQL.Append("b.length/2 "); //(length)systypes 中的最大物理存储长度
    sbSQL.Append("else ");
    sbSQL.Append("b.length "); //systypes 中的最大物理存储长度
    sbSQL.Append("end ");
    sbSQL.Append("length "); //别名
    sbSQL.Append("from ");
    sbSQL.Append("sysobjects a "); //创建的每个对象(约束、默认值、日志、规则、存储过程等)在表中占一行
    sbSQL.Append("join ");
    sbSQL.Append("syscolumns b "); //每个表和视图中的每列在表中占一行,存储过程中的每个参数在表中也占一行
    sbSQL.Append("on ");
    sbSQL.Append("a.id= "); //对象标识号。
    sbSQL.Append("b.id "); //该列所属的表对象 ID,或与该参数关联的存储过程 ID。
    sbSQL.Append("join "); //JOIN
    sbSQL.Append("systypes c "); //每种系统提供数据类型和用户定义数据类型,均包含一行信息
    sbSQL.Append("on ");
    sbSQL.Append("b.xusertype= "); //扩展的用户定义数据类型 ID。
    sbSQL.Append("c.xusertype "); //扩展用户类型
    sbSQL.Append("where ");
    sbSQL.Append("b.autoval "); //仅限内部使用(varbinary(255))
    sbSQL.Append("is null ");
    sbSQL.Append("and ");
    sbSQL.Append("a.name='"); //对象名。
    sbSQL.Append(strTemp); //表名
    sbSQL.Append("'"); SqlCommand myCommand = new SqlCommand(sbSQL.ToString(),objConn);
    SqlDataReader objReader = myCommand.ExecuteReader();
    sbSQL.Remove(0,sbSQL.Length);
    return objReader;
    }
    catch(System.Exception exp)
    {
    MessageBox.Show(exp.Message);
    return null;
    }
    }
      

  16.   

    /********************************************
    * 过程名:ReadWriteData
    * 功能  :读数据,并写入另一数据库 
    ******************************************
    */
    public bool ReadWriteData(string strTableName,string sourceTable,string deTable)
    {

    string strSQLtemp="";
    string strSQLtemp2="";
    string strSQLtemp3="";
    SqlCommand CommandInsert = new SqlCommand();
    SqlCommand CommandUpdate = new SqlCommand();
    try
    {
    //open Connection
    Ado.adoClass.F_ConnOpen(Ado.adoClass.objConnection1); //Create SqlDataReder
    SqlDataReader myReader=getColumnsContentsByTable(strTableName,Ado.adoClass.objConnection1);
    while (myReader.Read()) 
    {
    string strTemp=myReader.GetString(0);
    if (strTemp==QUERYDATE)
    continue;

    strSQLtemp = strSQLtemp + strTemp + ","; //字段名(select)
    strSQLtemp2 = strSQLtemp2 + "@" + strTemp + ","; //字段值(insert)
    strSQLtemp3 = strSQLtemp3 + strTemp +" = @" + strTemp + ","; //字段=值(update)
    switch( myReader.GetString(1))
    {
    case CHAR:
    CommandInsert.Parameters.Add("@" + strTemp,System.Data.SqlDbType.Char,myReader.GetInt32(2),strTemp);
    CommandUpdate.Parameters.Add("@" + strTemp,System.Data.SqlDbType.Char,myReader.GetInt32(2),strTemp);
    break;
    case DATETIME:
    CommandInsert.Parameters.Add("@" + strTemp,System.Data.SqlDbType.DateTime,myReader.GetInt32(2),strTemp);
    CommandUpdate.Parameters.Add("@" + strTemp,System.Data.SqlDbType.DateTime,myReader.GetInt32(2),strTemp);
    break;
    case DECIMAL:
    CommandInsert.Parameters.Add("@" + strTemp,System.Data.SqlDbType.Decimal,myReader.GetInt32(2),strTemp);
    CommandUpdate.Parameters.Add("@" + strTemp,System.Data.SqlDbType.Decimal,myReader.GetInt32(2),strTemp);
    break;
    case INT:
    CommandInsert.Parameters.Add("@" + strTemp,System.Data.SqlDbType.Int,myReader.GetInt32(2),strTemp);
    CommandUpdate.Parameters.Add("@" + strTemp,System.Data.SqlDbType.Int,myReader.GetInt32(2),strTemp);
    break;
    case NVARCHAR:
    CommandInsert.Parameters.Add("@" + strTemp,System.Data.SqlDbType.NVarChar,myReader.GetInt32(2),strTemp);
    CommandUpdate.Parameters.Add("@" + strTemp,System.Data.SqlDbType.NVarChar,myReader.GetInt32(2),strTemp);
    break;
    case VARCHAR:
    CommandInsert.Parameters.Add("@" + strTemp,System.Data.SqlDbType.VarChar,myReader.GetInt32(2),strTemp);
    CommandUpdate.Parameters.Add("@" + strTemp,System.Data.SqlDbType.VarChar,myReader.GetInt32(2),strTemp);
    break;
    case NUMERIC:
    CommandInsert.Parameters.Add("@" + strTemp,System.Data.SqlDbType.Decimal,myReader.GetInt32(2),strTemp);
    CommandUpdate.Parameters.Add("@" + strTemp,System.Data.SqlDbType.Decimal,myReader.GetInt32(2),strTemp);
    break;
    case BIT:
    CommandInsert.Parameters.Add("@" + strTemp,System.Data.SqlDbType.Bit,myReader.GetInt32(2),strTemp);
    CommandUpdate.Parameters.Add("@" + strTemp,System.Data.SqlDbType.Bit,myReader.GetInt32(2),strTemp);
    break;
    default:
    CommandInsert.Parameters.Add("@" + strTemp,System.Data.SqlDbType.Variant,myReader.GetInt32(2),strTemp);   
    CommandUpdate.Parameters.Add("@" + strTemp,System.Data.SqlDbType.Variant,myReader.GetInt32(2),strTemp);
    break;      
    }//end switch

    }//end while myReader.Close(); strSQLtemp=strSQLtemp.Substring(0,strSQLtemp.Length -1);
    strSQLtemp2=strSQLtemp2.Substring(0,strSQLtemp2.Length -1);
    strSQLtemp3=strSQLtemp3.Substring(0,strSQLtemp3.Length -1);

    strSelect="select " + strSQLtemp + " from " + strTableName + " where " + QUERYDATE +" >= ";
    strSelect= strSelect + "convert(datetime,'" + strBeginDate + " 00:00:00.000') and ";
    strSelect= strSelect + QUERYDATE +" <= convert(datetime,'" + strEndDate + " 23:59:59.999')"; strSelectDe="select " + strSQLtemp + " from " + strTableName;
    strInsert="insert into " + strTableName +"(" + strSQLtemp +") values (" +strSQLtemp2 + ")";
    strUpdate="update " + strTableName + " set " + strSQLtemp3 + " where 1=1";
    DataSet ds;
    ds=Ado.adoClass.GetMyDataSetFillSchema(Ado.adoClass.objConnection,strSelect,sourceTable); int intTest=ds.Tables[sourceTable].PrimaryKey.Length;
    for(int i=0;i<ds.Tables[sourceTable].PrimaryKey.Length;i++)
    {
    strUpdate = strUpdate + " and " + ds.Tables[sourceTable].PrimaryKey[i] + " = @" ;
    strUpdate = strUpdate + ds.Tables[sourceTable].PrimaryKey[i];
    }
    // strUpdate=strUpdate+" and sz=@sz and nsrbh=@nsrbh and sbrq=@sbrq and sm=@sm and kuan=@kuan and xiang=@xiang and jc=@jc and dkbz=@dkbz and qxlx=@qxlx";// 写数据
    SqlDataAdapter adp=new SqlDataAdapter();
    adp.SelectCommand = new SqlCommand(strSelectDe,Ado.adoClass.objConnection1);

    CommandInsert.Connection=Ado.adoClass.objConnection1;
    CommandInsert.CommandText=strInsert;
    adp.InsertCommand=CommandInsert;

    CommandUpdate.Connection=Ado.adoClass.objConnection1;
    CommandUpdate.CommandText=strUpdate;
    adp.UpdateCommand=CommandUpdate;

    adp.TableMappings.Add("table1", sourceTable);
    adp.TableMappings.Add("table", deTable);


    adp.FillSchema(ds,SchemaType.Source,deTable);
    adp.Fill(ds,deTable);

    for(int i=0;i<ds.Tables[sourceTable].Rows.Count;i++)
    {
    ds.Tables[deTable].BeginLoadData();
    ds.Tables[deTable].LoadDataRow( ds.Tables[sourceTable].Rows[i].ItemArray ,false);
    ds.Tables[deTable].EndLoadData();
    }
    adp.Update(ds,deTable);
    ds.Clear();
    adp=null;
    CommandInsert=null;
    CommandUpdate=null;
    return true;
    }
    catch(System.Exception err)
    {
    MessageBox.Show(err.Message);
    return false;
    }
    }
      

  17.   

    这是静态类 的静态方法:
    public static DataSet GetMyDataSetFillSchema(SqlConnection objConn,string strSQL,string strTable)
    {
        SqlDataAdapter objAdapter = new SqlDataAdapter(strSQL,objConn);
        DataSet ds = new DataSet();
        try
        {
            if(objConn.State!=System.Data.ConnectionState.Open)  
            {  
                objConn.Open();  
            }  
            objAdapter.Fill(ds,strTable);
            objAdapter.FillSchema(ds,SchemaType.Source,strTable);
            return ds;
        }
        catch(System.Exception exp)
        {
            throw new Exception(exp.Message);
        }
    }
      

  18.   

    虽然还是我自己写了,不过谢谢 brightheroes (50)。真的
    已经还要跟你学习^_^