📄 dbserver.cs
字号:
using System;
using System.Data;
using System.Data.OleDb;
using System.Collections;
using System.Net;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Tcp;
namespace DDB
{
/// <summary>
/// Summary description for Class1.
/// </summary>
public class DbServer:System.MarshalByRefObject
{
private OleDbConnection Conn;
public string ServerId;
public ArrayList DbServerList;
public DbServer()
{
}
public string Initial()
{
DataSet myds;
string ipstr;
DataRow myRow;
string[] temp;
string p;
DbServer myDbServer;
DbServerList=new ArrayList();
IPHostEntry LocalHost=Dns.GetHostByName(Dns.GetHostName());
string LocalIPString=LocalHost.AddressList[0].ToString().Trim();
string LocalId="";
string AccessConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=ddb.mdb";
Conn=new OleDbConnection(AccessConn);
Conn.Open();
myds=Query("select * from location");
for(int i=0;i<myds.Tables["Result"].Rows.Count;i++)
{
myRow=myds.Tables["Result"].Rows[i];
ipstr=myRow["ip"].ToString().Trim();
if(ipstr==LocalIPString)LocalId=myRow["id"].ToString().Trim();
temp=ipstr.Split('.');
p=(9000+Int32.Parse(temp[3])).ToString();
myDbServer = ( DbServer )Activator.GetObject( typeof( DbServer ), "tcp://"+ipstr+":"+p+"/DDB" );
// myDbServer.SetId(myRow["id"].ToString().Trim());
DbServerList.Add(myDbServer);
}
this.ServerId=LocalId;
return LocalId;
}
// public void InsertNewServer(string id,string ip)
// {
// string ipstr;
// temp=ip.Split('.');
// p=(9000+Int32.Parse(temp[3])).ToString();
// myDbServer = ( DbServer )Activator.GetObject( typeof( DbServer ), "tcp://"+ip+":"+p+"/DDB" );
// myDbServer.SetId(id);
// DbServerList.Add(myDbServer);
//
// //location表内是否有该ip
// DataSet myds=Query(this.ServerId,"select * from location");
// DataRow myRow;
// int flag=0;
// for(int i=0;i<myds.Tables["Result"].Rows.Count;i++)
// {
// myRow=myds.Tables["Result"].Rows[i];
// ipstr=myRow["ip"].ToString().Trim();
// if(ipstr==ip)flag=1;
// }
// if(flag==0)
// {
// Insert("INSERT INTO location(id,ip) VALUES('"+id+"','"+ip+"')");
// }
// }
// public void Quit(string id)
// {
// if(id==this.ServerId)
// {
//
// }
//
// }
//将计算机名称转换为DbServers数组的下标
public int GetServerIndex(string id)
{
int index=new int();
for(int i=0;i<DbServerList.Count;i++)
{
if(((DbServer)DbServerList[i]).GetId()==id)
{
index=i;
break;
}
}
return index;
}
public void SetId(string id)
{
ServerId=id;
}
public string GetId()
{
return ServerId;
}
//本地查询:
public DataSet Query(string QueryString)
{
if(Conn.State==ConnectionState.Closed)Conn.Open();
DataSet ds;
try
{
ds = new DataSet();
DataTable dt=new DataTable("Result");
OleDbDataAdapter adapter = new OleDbDataAdapter();
OleDbCommand myAccessDataSetCmd = new OleDbCommand(QueryString,Conn);
adapter.SelectCommand=myAccessDataSetCmd;
adapter.Fill(dt);
ds.Tables.Add(dt);
}
finally
{
Conn.Close();
}
return ds;
}
public DataSet Query(string location,string QueryString)
{
if(Conn.State==ConnectionState.Closed)Conn.Open();
DataSet ds;
try
{
if(this.ServerId==location)
{
ds = new DataSet();
DataTable dt=new DataTable("Result");
OleDbDataAdapter adapter = new OleDbDataAdapter();
OleDbCommand myAccessDataSetCmd = new OleDbCommand(QueryString,Conn);
adapter.SelectCommand=myAccessDataSetCmd;
adapter.Fill(dt);
ds.Tables.Add(dt);
}
else
{
int index=GetServerIndex(location);
ds=((DbServer)DbServerList[index]).Query(location,QueryString);
}
}
finally
{
Conn.Close();
}
return ds;
}
//表连接
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;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -