⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dbserver.cs

📁 Csharp网络应用案例导航 Csharp网络应用案例导航
💻 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 + -