您现在的位置是:首页 >

数据库管理系统的核心 元数据库库管理

火烧 2022-04-10 17:41:00 1046
元数据库库管理   所谓元数据就是描述数据的数据 元数据库就是存放描述数据的数据 元数据主要用于描述数据的特征等的数据 在很多场合下都会遇到元数据 例如文件系统里面有 这里介绍的元数据主要是指描述空间

元数据库库管理  

  所谓元数据就是描述数据的数据 元数据库就是存放描述数据的数据 元数据主要用于描述数据的特征等的数据 在很多场合下都会遇到元数据 例如文件系统里面有 这里介绍的元数据主要是指描述空间数据特征的元数据 例如属于哪一类数据等

  今天由于时间关系就简单介绍一下元数据库管理的实现

   初始化显示元数据库信息的头部信息

  [csharp] view plaincopy /// <summary> /// 初始化datagridView的头部显示信息/// </summary> private void InitDataGridView()

  { //dataGridViewX Rows Clear() SqlHelper sh = new SqlHelper() string sql = select id name description from jcsjk_databaseinfo DataSet ds = sh ReturnDataSet(sql jcsjk_databaseinfo ) dataGridViewX DataSource = ds Tables[ ]

  dataGridViewX Columns[ ] HeaderText = 元数据库ID dataGridViewX Columns[ ] Width = dataGridViewX Columns[ ] HeaderText = 元数据库名称 dataGridViewX Columns[ ] Width =

  dataGridViewX Columns[ ] HeaderText = 元数据库描述信息 dataGridViewX Columns[ ] Width =

  } 删除元数据库

  [csharp] view plaincopy /// <summary> /// 删除元数据库/// </summary> /// <param name= sender ></param> /// <param name= e ></param> private void delMetaDatabaseBtn_Click(object sender EventArgs e)

  { // 删除所有表if (dataGridViewX CurrentRow Index < )

  { MessageBox Show( 请选择需要删除的数据库那一行 ) return } string strDatabaseName = dataGridViewX Rows[dataGridViewX CurrentRow Index] Cells[ ] Value ToString() SqlHelper sh = new SqlHelper() string sql = select table_name from user_tables where table_name like + strDatabaseName ToUpper() + /_% ESCAPE / OracleDataReader odr = sh ReturnDataReader(sql)

  while (odr Read())

  { //删除关联外键string strTemp = odr[ ] ToString() ToUpper() strTemp = strTemp Substring(strDatabaseName Length + ) sql = select table_name constraint_name from user_constraints where constraint_type= R + and constraint_name like + strTemp + % OracleDataReader odr = sh ReturnDataReader(sql)

  while (odr Read())

  { sql = ALTER TABLE + odr [ ] ToString() ToUpper() + DROP CONSTRAINT + odr [ ] ToString() ToUpper() sh ExecuteSQL(sql) } sql = drop table + odr[ ] ToString() ToUpper() sh ExecuteSQL(sql) } // 删除记录Hashtable ht = new Hashtable() ht Add( name strDatabaseName) try { sh Del( jcsjk_databaseinfo name= + strDatabaseName + ht) } catch (Exception)

  { LogHelp writeLog(taUsername 元数据库管理 删除元数据库< + strDatabaseName + >失败! ) MessageBox Show( 删除元数据库< + strDatabaseName + >失败! ) }

  LogHelp writeLog(taUsername 元数据库管理 删除元数据库< + strDatabaseName + >成功! ) MessageBox Show( 删除元数据库< + strDatabaseName + >成功! ) }

   清空元数据库

  [csharp] view plaincopy /// <summary> /// 清空元数据库中的数据/// </summary> /// <param name= sender ></param> /// <param name= e ></param> private void clearmetaDataBtn_Click(object sender EventArgs e)

  { if (dataGridViewX CurrentRow Index < )

  { MessageBox Show( 选择数据库! ) return } SqlHelper sh = new SqlHelper() string strDatabaseName = dataGridViewX CurrentRow Cells[ ] Value ToString() //NewDataSet nds = new NewDataSet() string sql = string Empty sql = select table_name from user_tables where table_name like + strDatabaseName ToUpper() + /_% ESCAPE / OracleDataReader odr = sh ReturnDataReader(sql)

  while (odr Read())

  { sql = delete from + odr[ ] ToString() ToUpper() try { sh ExecuteSQL(sql) } catch (Exception)

  { LogHelp writeLog(taUsername 元数据库管理 清空元数据库< + strDatabaseName + >的数据失败! ) MessageBox Show( 清空元数据库< + strDatabaseName + >的数据失败! ) return } LogHelp writeLog(taUsername 元数据库管理 清空元数据库< + strDatabaseName + >的数据成功! ) MessageBox Show( 清空元数据库< + strDatabaseName + >的数据成功! ) /* foreach (DataTable dt in nds Tables)

  { string strTableName = strDatabaseName + _ + dt TableName sql = select * from + strTableName DataSet ds = new DataSet()

  OracleDataAdapter oda = new OracleDataAdapter(sql ConfigurationSettings AppSettings[ ConnectionString ]) try { oda Fill(ds) oda Update(dt) } catch (Exception ex)

  { LogHelp writeLog(taUsername 元数据库管理 清空元数据库< + strDatabaseName + >的数据失败! ) MessageBox Show( 清空元数据库< + strDatabaseName + >的数据失败! ) } LogHelp writeLog(taUsername 元数据库管理 清空元数据库< + strDatabaseName + >的数据成功! ) MessageBox Show( 清空元数据库< + strDatabaseName + >的数据成功! ) * */ }

  清空元数据库与删除元数据库是不同的功能 删除元数据库就是把存放元数据的库都一起删除了 但是清空元数据库只是把库里面的内容删除 库本身存在

   创建元数据库

  这是比较复杂的一个功能 因为创建一个元数据库需要根据一定的标准来创建 这些标准都是通过xsd文件描述的 所以首先要解析这个xml的模式描述文件 然后根据解析的内容存放到相应的字段中去 具体实现如下

  [csharp] view plaincopy private void createBtn_Click(object sender EventArgs e)

  { SqlHelper sh = new SqlHelper() string sql = string Empty

  if (databaseIDTxt Text Trim() == || databaseNameTxt Text Trim() == )

  { errTxt Text = 数据库ID或名称不能为空 return }

  //查看元数据库是否存在sql = select * from jcsjk_databaseinfo where name= + databaseNameTxt Text +

  if (sh GetRecordCount(sql) > )

  { MessageBox Show( 此元数据库已经存在 请从新命名元数据库! ) return }

  Hashtable ht = new Hashtable() string strContent = string Empty DataSet ds = new DataSet() //从文件标准创建if (!checkBoxX Checked)

  { if (metaFileTxt Text == || Path GetExtension(metaFileTxt Text) ToLower() != xsd )

  { errTxt Text = 请选择正确的XSD文件 return } if (metaIDTxt Text Trim() == )

  { errTxt Text = 元数据标准ID不能为空 return }

  // 读入xsd文件ds ReadXmlSchema(metaFileTxt Text)

  // create table in tablespace try { OracleDataSchemaAdapter odsa = new OracleDataSchemaAdapter() odsa Create(ds true databaseNameTxt Text + _ SDE ) } catch (ArgumentException ae)

  { LogHelp writeLog(taUsername 元数据库管理 创建元数据库< + databaseNameTxt Text + >失败! ) MessageBox Show( —— Error —— + ae Message + —— Instructions —— ) } catch (FileNotFoundException)

  { LogHelp writeLog(taUsername 元数据库管理 创建元数据库< + databaseNameTxt Text + >失败! ) MessageBox Show( File not found + metaFileTxt Text) } catch (Exception)

  { LogHelp writeLog(taUsername 元数据库管理 创建元数据库< + databaseNameTxt Text + >失败! ) MessageBox Show( 创建元数据库< + databaseNameTxt Text + >失败! ) }

  //写入元数据标准到数据库StreamReader sr = new StreamReader(new FileStream(metaFileTxt Text FileMode Open) System Text Encoding GetEncoding( GB ))

  while (!sr EndOfStream)

  { strContent += sr ReadLine() } sr Close() string strName = Path GetFileNameWithoutExtension(metaFileTxt Text) // sql = select * from jcsjk_databaseinfo where name= + strName + if (sh GetRecordCount(sql) <= )

  { XmlDocument xmlDoc = new XmlDocument() xmlDoc Load(metaFileTxt Text) XmlNodeList xnl = xmlDoc GetElementsByTagName( xs schema ) XmlNode xn = xnl[ ] //插入元数据标准到数据库中 用参数才能插入 因为content字段内容太大sql = insert into jcsjk_metastand (id name content version) values( + id name content version) OracleParameter[] op = new OracleParameter[ ] op[ ] = new OracleParameter() op[ ] ParameterName = id op[ ] OracleType = OracleType NVarChar op[ ] Value = metaIDTxt Text op[ ] = new OracleParameter() op[ ] ParameterName = name op[ ] OracleType = OracleType NVarChar

  string strValue = xn ChildNodes[ ] ChildNodes[ ] InnerText

  strValue = strValue Substring(strValue IndexOf( ) + ) op[ ] Value = strValue op[ ] = new OracleParameter() op[ ] ParameterName = content op[ ] OracleType = OracleType Clob op[ ] Value = strContent strValue = xn ChildNodes[ ] ChildNodes[ ] InnerText strValue = strValue Substring(strValue IndexOf( ) + ) op[ ] = new OracleParameter() op[ ] ParameterName = op[ ] OracleType = OracleType NVarChar op[ ] Value = strValue strValue = xn ChildNodes[ ] ChildNodes[ ] InnerText strValue = strValue Substring(strValue IndexOf( ) + ) op[ ] = new OracleParameter() op[ ] ParameterName = version op[ ] OracleType = OracleType NVarChar op[ ] Value = strValue try { sh ExecuteNonQuery(sql op) } catch (Exception ex)

  { LogHelp writeLog(taUsername 元数据库管理 写入元数据标准< + strName + >到数据库失败! ) MessageBox Show( 写入元数据标准<< + strName + >到数据库失败! ) } //从数据库以存储的标准创建else { string strStandName = boBoxEx SelectedItem ToString()

  sql = select content from jcsjk_metastand where name= + strStandName + OracleDataReader odr = sh ReturnDataReader(sql) if (odr Read())

  { StreamWriter bw = new StreamWriter(new FileStream( temp xsd FileMode Create) System Text Encoding GetEncoding( GB ))

  bw Write(odr[ ] ToString())

  bw Close() ds ReadXmlSchema( temp xsd ) System IO File Delete( temp xsd ) try { OracleDataSchemaAdapter odsa = new OracleDataSchemaAdapter() odsa Create(ds true databaseNameTxt Text + _ SDE ) } catch (ArgumentException ae)

  { LogHelp writeLog(taUsername 元数据库管理 创建元数据库< + databaseNameTxt Text + >失败! ) MessageBox Show( —— Error —— + ae Message + —— Instructions —— ) } catch (FileNotFoundException)

数据库管理系统的核心 元数据库库管理

  { LogHelp writeLog(taUsername 元数据库管理 创建元数据库< + databaseNameTxt Text + >失败! ) MessageBox Show( File not found + metaFileTxt Text) } catch (Exception)

  { LogHelp writeLog(taUsername 元数据库管理 创建元数据库< + databaseNameTxt Text + >失败! ) MessageBox Show( 创建元数据库< + databaseNameTxt Text + >失败! ) }

  }

  //插入元数据库信息到数据库sql = select * from jcsjk_databaseinfo where name= + databaseNameTxt Text + if (sh GetRecordCount(sql) <= )

  { ht Clear() ht Add( ID databaseIDTxt Text) ht Add( NAME databaseNameTxt Text) if (descriptionText Text != )

  { ht Add( DESCRIPTION descriptionText Text) } try { sh Insert( jcsjk_databaseinfo ht) } catch (Exception)

  { LogHelp writeLog(taUsername 元数据库管理 插入元数据库< + databaseNameTxt Text + >信息到数据库失败! ) MessageBox Show( 插入元数据库<< + databaseNameTxt Text + >信息到数据库失败! ) }

lishixinzhi/Article/program/ASP/201311/21847  
永远跟党走
  • 如果你觉得本站很棒,可以通过扫码支付打赏哦!

    • 微信收款码
    • 支付宝收款码