如何用ado.net将一个access文件中的表读出来再导入另外一个access文件中?

XiDao 2003-10-20 12:05:58
请问,如果随便给一个access数据库文件,要求将其中的一个仅仅知道表名的表倒出来,存储到另外一个acccess数据库文件中,应该如何做?利用C#如何方便实现这个功能?
...全文
50 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
fgc5201314 2003-11-21
  • 打赏
  • 举报
回复
你想干什么:给一些你:
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;

}

}
}

windsoft 2003-11-21
  • 打赏
  • 举报
回复
有没有人回答
我也想知道呀
XiDao 2003-10-20
  • 打赏
  • 举报
回复
问题时,如果用DataSet读出表很容易,但是如何将DataSet中的表转存入另外一个access数据库中呢?假如另外一个库没有这个表存在的话怎么办?
Stevetan81 2003-10-20
  • 打赏
  • 举报
回复
1 将目标表用 数据适配器 填充到 数据集对象中
2 实例化一个新的连接到目标数据库的数据适配器,再将数据集中的表用适配器填入数据库
night_elves 2003-10-20
  • 打赏
  • 举报
回复
导出操作很简单的,用DataSet.
关于access表操作可以参考以往的帖子(好像思归答过).

110,537

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧