class DBConnection
{
private string GDBSource = string.Empty;//GDB路径
private bool ConncetState = false;
IWorkspace m_workspace;//GDB工作空间
IWorkspaceFactory pWorkspaceFactory = new FileGDBWorkspaceFactoryClass();
IFeatureClass pFeatureCls = null;
#region gdb
public DBConnection(string GDBPath)
{
this.GDBSource = GDBPath;
}
//连接数据库
public bool Open()
{
if (GDBSource.EndsWith(".gdb"))
{
m_workspace = pWorkspaceFactory.OpenFromFile(GDBSource, 0);
ConncetState = true;
return true;
}
ConncetState = false;
return false;
}
//获取数据库中表名称
public List<String> GetTableNames()
{
if (!ConncetState)
{
MessageBox.Show("数据库未连接!");
return null;
}
List<String> TableNames = new List<string>();
IEnumDatasetName enumDatasetName = m_workspace.get_DatasetNames(esriDatasetType.esriDTAny);
enumDatasetName.Reset();
IDatasetName TableName = enumDatasetName.Next();
while (TableName != null)
{
if (!TableNames.Contains(TableName.Name))
{
TableNames.Add(TableName.Name);
}
TableName = enumDatasetName.Next();
}
//释放Com组件
while (System.Runtime.InteropServices.Marshal.ReleaseComObject(enumDatasetName) > 0) { }
if (TableNames.Count <= 0) return null;
return TableNames;
}
//SDE外执行更新语句,可能会破坏数据结构完整性
public void ExecuteSql(string strSql)
{
if (!ConncetState)
{
MessageBox.Show("数据库未连接!");
return;
}
m_workspace.ExecuteSQL(strSql);
MessageBox.Show("已删除选定要素");
}
/// <summary>
/// 通过ITable.DeleteSearchedRows方法删除要素
/// </summary>
/// <param name="pFeatureclass">要素类</param>
/// <param name="strWhereClause">查询条件</param>
public static void DeleteFeatureByITable(IFeatureClass pFeatureclass, string strWhereClause)
{
IQueryFilter pQueryFilter = new QueryFilterClass();
pQueryFilter.WhereClause = strWhereClause;
ITable pTable = pFeatureclass as ITable;
pTable.DeleteSearchedRows(pQueryFilter);
}
//断开连接
public void Close()
{
this.ConncetState = false;
}
/// <summary>
/// 将FeatClass属性表换成DataTable
/// </summary>
/// <param name="featCls">输入的要素类</param>
/// <param name="pQueryFilter">查询器,无则为Null</param>
/// <returns></returns>
public DataTable FeatClass2DataTable(string TableName, IQueryFilter pQueryFilter)
{
IFeatureWorkspace iFeatureWorkspace = (IFeatureWorkspace)this.m_workspace;
IFeatureClass featCls = iFeatureWorkspace.OpenFeatureClass(TableName);
DataTable pAttDT = new DataTable();
if (featCls != null)
{
ITable pFeatTable = featCls as ITable;
int pFieldCount = pFeatTable.Fields.FieldCount;
ICursor pCursor = pFeatTable.Search(pQueryFilter, false);
IRow pRow = pCursor.NextRow();
//根据表结构添加列名
for (int j = 0; j < pFieldCount; j++)
{
string pFieldName = pFeatTable.Fields.get_Field(j).Name;
pAttDT.Columns.Add(pFieldName, typeof(string));
}
while (pRow != null)
{
DataRow pDataRow = pAttDT.NewRow();
for (int j = 0; j < pFieldCount; j++)
{
string pFieldValue = pRow.get_Value(j).ToString();
string pFieldName = pFeatTable.Fields.get_Field(j).Name;
pDataRow[pFieldName] = pFieldValue;
}
pAttDT.Rows.Add(pDataRow);
pRow = pCursor.NextRow();
}
}
return pAttDT;
}
#endregion
}
class OtherConnection
{
SqlConnection Sqlcnn = null;
public OracleConnection Oraclecnn = null;
public MySqlConnection MySqlcnn = null;
public OleDbConnection OleDbcnn = null;
string conString = "";
public OtherConnection(string add, string name, string user, string pss)
{
conString = "data source="+add+"; Database="+name+";user id="+user+"; password="+pss;
// conString = "data source=localhost; Database=mysql;user id=root; password=123456yll";
}
public OtherConnection(string source)
{
conString = "Provider=Microsoft.Jet.OLEDB.4.0; data source="+source+"; Persist Security Info=False;";
}
public OleDbConnection getAcessConnection()
{
OleDbcnn = new OleDbConnection(conString);
OleDbcnn.Open();
return OleDbcnn;
}
public SqlConnection getSqlConnection()
{
Sqlcnn = new SqlConnection(conString);
Sqlcnn.Open();
return Sqlcnn;
}
public OracleConnection getOracleConnection()
{
Oraclecnn = new OracleConnection(conString);
Oraclecnn.Open();
return Oraclecnn;
}
public MySqlConnection getMySqlConnection()
{
MySqlcnn = new MySqlConnection(conString);
MySqlcnn.Open();
return MySqlcnn;
}
# region Acess
public List<string> getTBNacess()
{
List<string> list_tblName= new List<string>(); ;
DataTable dt = OleDbcnn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });
foreach (DataRow dr in dt.Rows)
{
string value = dr["TABLE_NAME"].ToString();
list_tblName.Add(value);
}
return list_tblName;
}
public DataTable getTBacess(string name) {
string sql = "select * from "+name;
OleDbDataAdapter thisAdapter = new OleDbDataAdapter(sql, OleDbcnn);
System.Data.DataSet thisDataSet = new System.Data.DataSet();
thisAdapter.Fill(thisDataSet, "table");
DataTable dt = thisDataSet.Tables["table"];
return dt;
}
#endregion
#region mysql
public DataTable getTBmysql(string name)
{
MySqlcnn.Open();
string sql = "select * from " + name;
//建立DataSet对象(相当于建立前台的虚拟数据库)
DataSet ds = new DataSet();
//建立DataAdapter对象
MySqlCommand sqlCmd = new MySqlCommand(sql, MySqlcnn);
MySqlDataAdapter msda = new MySqlDataAdapter(sqlCmd);
//将查询的结果存到虚拟数据库ds中的虚拟表tabuser中
msda.Fill(ds, "tabuser");
//将数据表tabuser的数据复制到DataTable对象(取数据)
DataTable dtable = ds.Tables["tabuser"];
MySqlcnn.Close();
return dtable;
}
public List<string> getTBNmysql()
{
//MySqlcnn.ConnectionString = conString;
List<string> list_tblName = null;
string sql = "show tables;";
MySqlDataReader reader = null;
MySqlCommand cmd = new MySqlCommand(sql, MySqlcnn);
reader = cmd.ExecuteReader();
if (reader.HasRows)
{
list_tblName = new List<string>();
while (reader.Read())
{
string t = reader.GetString(0);
list_tblName.Add(t);
}
}
MySqlcnn.Close();
return list_tblName;
}
#endregion
public DataTable getTBOracle(string name)
{
Oraclecnn.Open();
string sql = "select * from " + name;
//建立DataSet对象(相当于建立前台的虚拟数据库)
DataSet ds = new DataSet();
//建立DataAdapter对象
OracleCommand sqlCmd = new OracleCommand(sql, Oraclecnn);
OracleDataAdapter msda = new OracleDataAdapter(sqlCmd);
//将查询的结果存到虚拟数据库ds中的虚拟表tabuser中
msda.Fill(ds, "tabuser");
//将数据表tabuser的数据复制到DataTable对象(取数据)
DataTable dtable = ds.Tables["tabuser"];
Oraclecnn.Close();
return dtable;
}
public List<string> getTBNOracle(string db)
{
List<string> list_tblName = new List<string>(); ;
OracleCommand com = Oraclecnn.CreateCommand();
com.CommandText = "select * from all_tables WHERE owner='"+ db+"' ;";//写好想执行的Sql语句
OracleDataReader odr = com.ExecuteReader();
while (odr.Read())//读取数据,如果返回为false的话,就说明到记录集的尾部了
{
string t = odr.GetOracleString(0).ToString();//将读取到的值显示到定义的控件中。
list_tblName.Add(t);
}
odr.Close();//关闭reader.这是一定要写的
Oraclecnn.Close();
return list_tblName;
}
}
1、打开数据库 (各种数据库,各表名
2、根据表名,查询该表内容
注意!!
1、mysql版本需要4.0对应vs2010
2、orcaleclient 已经被vs表明过时,需要手动导入引用