导出操作很简单的,用DataSet.
关于access表操作可以参考以往的帖子(好像思归答过).

解决方案 »

  1.   

    问题时,如果用DataSet读出表很容易,但是如何将DataSet中的表转存入另外一个access数据库中呢?假如另外一个库没有这个表存在的话怎么办?
      

  2.   

    你想干什么:给一些你:
    public string JoinString(string table1,string table2,string[] ProjectAttributes, string JoinAttribute)
    {
    string temp="";
    for(int i=0;i<ProjectAttributes.Length;i++)
    {
    temp+=ProjectAttributes[i];
    if(i!=ProjectAttributes.Length-1)
    temp+=",";
    }
    return "select "+temp+" from "+table1+","+table2+" where "+table1+"."+JoinAttribute+"="+table2+"."+JoinAttribute; } //slocation:执行查询的机器
    //dlocation:存放结果的机器
    //在slocation计算机上执行QueryString后将结果传到dlocation计算机上,并建立临时表存储结果
    //返回:dlocation上的结果临时表名
    public string CreateTempTable(string slocation,string dlocation,string QueryString)
    {
    int sindex,dindex;
    sindex=GetServerIndex(slocation);
    dindex=GetServerIndex(dlocation); string tablename=((DbServer)DbServerList[dindex]).CreateTempTable(slocation,QueryString);
    return tablename;
    } //将水平划分的两个记录集合在一起
    public DataSet HMergeDataSet(DataSet ds1,DataSet ds2)
    {
    DataSet NewDs=new DataSet();
    DataTable NewTable=ds1.Tables["Result"].Copy();
    NewDs.Tables.Add(NewTable); DataRow NewRow;
    for(int i=0;i<ds2.Tables["Result"].Rows.Count;i++)
    {
    NewRow=ds2.Tables["Result"].Rows[i];
    NewDs.Tables["Result"].Rows.Add(NewRow.ItemArray);
    }
    return NewDs;
    } //将水平划分的两个临时表合在一起,返回结果表的表名
    public string HMergeTable(string table1,string table2)
    {
    if(Conn.State==ConnectionState.Closed)Conn.Open();
    DataSet ds1,ds2,ds3;
    ds1=Query(this.ServerId,"select * from "+table1);
    ds2=Query(this.ServerId,"select * from "+table2);
    ds3=HMergeDataSet(ds1,ds2);
    return CreateTempTable(ds3); } public bool Insert(string CommandString)
    {
    bool flag;
    if(Conn.State==ConnectionState.Closed)Conn.Open();
    OleDbCommand myInsertCmd = new OleDbCommand(CommandString,Conn);
    try
    {
    if(myInsertCmd.ExecuteNonQuery()>0)flag=true;
    else flag=false;
    } finally
    {
    Conn.Close();
    }
    return flag;
    } public bool Delete(string CommandString)
    {
    bool flag;
    if(Conn.State==ConnectionState.Closed)Conn.Open();
    OleDbCommand myDeleteCmd = new OleDbCommand(CommandString,Conn);
    try
    {
    if(myDeleteCmd.ExecuteNonQuery()>0)flag=true;
    else flag=false;
    } finally
    {
    Conn.Close();
    }
    return flag;
    } public bool CreateTable(string CommandString)
    {
    bool flag;
    if(Conn.State==ConnectionState.Closed)Conn.Open();
    OleDbCommand myCreateCmd = new OleDbCommand(CommandString,Conn);
    try
    {
    if(myCreateCmd.ExecuteNonQuery()>0)flag=true;
    else flag=false;
    } finally
    {
    Conn.Close();
    }
    return flag;
    } public bool DropTable(string CommandString)
    {
    bool flag;
    if(Conn.State==ConnectionState.Closed)Conn.Open();
    OleDbCommand myCmd = new OleDbCommand(CommandString,Conn);
    try
    {
    if(myCmd.ExecuteNonQuery()>0)flag=true;
    else flag=false;
    } finally
    {
    Conn.Close();
    }
    return flag;
    } public bool UpdateTable(string CommandString)
    {
    bool flag;
    if(Conn.State==ConnectionState.Closed)Conn.Open();
    OleDbCommand myUpdateCmd = new OleDbCommand(CommandString,Conn);
    try
    {
    if(myUpdateCmd.ExecuteNonQuery()>0)flag=true;
    else flag=false;
    } finally
    {
    Conn.Close();
    }
    return flag;
    } public bool ExecuteNonQuery(string location,string CommandString)
    {
    bool flag;
    try
    {
    if(location==this.ServerId)
    {
    if(Conn.State==ConnectionState.Closed)Conn.Open();
    OleDbCommand myUpdateCmd = new OleDbCommand(CommandString,Conn);

    if(myUpdateCmd.ExecuteNonQuery()>0)flag=true;
    else flag=false;
    }
    else
    {
    int index=GetServerIndex(location);
    flag=((DbServer)DbServerList[index]).ExecuteNonQuery(location,CommandString);
    }
    }
    finally
    {
    Conn.Close();
    }
    return flag;
    } //创建临时表
    //参数:ds(记录集)
    //返回:临时表名temp+n
    public string CreateTempTable(DataSet ds)
    {
    //读出当前临时表序号
    if(Conn.State==ConnectionState.Closed)Conn.Open();
    DataSet myds;
    myds=Query(this.ServerId,"select tid from myconfig where id='1'"); int tempid=(int)myds.Tables["Result"].Rows[0]["tid"];
    tempid++;
    string TableName="temp"+tempid.ToString();

    UpdateTable("UPDATE myconfig SET tid="+tempid.ToString()+" WHERE (id='1')"); string myString=""; DataColumn myColumn;
    for(int i=0;i<ds.Tables["Result"].Columns.Count;i++)
    {
    myColumn=ds.Tables["Result"].Columns[i];
    myString+=myColumn.ColumnName+" "+TypeConvert(myColumn.DataType)+" null";
    if(i!=ds.Tables["Result"].Columns.Count-1)
    myString+=",";
    }

    CreateTable("CREATE TABLE "+TableName+" ("+myString+")"); DataSet NewDS=new DataSet();
    OleDbCommand myAccessDataSetCmd = new OleDbCommand("select * from "+TableName,Conn);
    OleDbDataAdapter myadapter=new OleDbDataAdapter();
    myadapter.SelectCommand=myAccessDataSetCmd;
    OleDbCommandBuilder myCB = new OleDbCommandBuilder(myadapter);
    myadapter.Fill(NewDS,TableName);

    DataRow NewRow;
    for(int i=0;i<ds.Tables["Result"].Rows.Count;i++)
    {
    NewRow=ds.Tables["Result"].Rows[i];
    NewDS.Tables[TableName].Rows.Add(NewRow.ItemArray);
    }

    myadapter.Update(NewDS,TableName);
    return TableName;

    } //计算机location上查询结果在本地建立临时表
    public string CreateTempTable(string location,string QueryString)
    {
    string tablename;
    DataSet ds=Query(location,QueryString);
    tablename=CreateTempTable(ds);
    return tablename;

    } private string TypeConvert(Type myDataType)
    {
    string myOleDbType="";
    switch(myDataType.FullName)
    {
    case "System.String":
    myOleDbType="text";
    break;
    case "System.Boolean":
    myOleDbType="Bit";
    break;
    case "System.Double":
    case "System.Single":
    myOleDbType="Double";
    break;
    case "System.DateTime":
    myOleDbType="Date";
    break;
    default:
    myOleDbType="Integer";
    break;
    }
    return myOleDbType;

    } }
    }