快速,持续,稳定,傻瓜式
支持Mysql,Sqlserver数据同步

C#中的MySQL模式

在线QQ客服:1922638

专业的SQL Server、MySQL数据库同步软件

介绍

本文介绍如何与MySQL数据库对话并从中提取模式。

背景

众所周知,MySQL是一个开源数据库。它是免费的,用于非商业目的。本文对在MySQL和C#中进行开发的任何人都将有所帮助。该实用程序背后的动机是什么?嗯,应用程序可能在数据库活动的中间崩溃。通常,这些数据库可能与开发/测试机不在同一站点上。我们需要一个实用程序来帮助我们在客户端站点上获取数据库的快照。如果您具有可以捕获客户端数据库状态的实用程序,则可以将其加载到测试计算机中。这个想法是重现客户所面临的情况。这样,您可以解决所有未发现的问题。

功能支持

  • 将架构另存为文本
  • 查看架构
  • 查看整个数据库

必备工具

  • Microsoft的ODBC.NET数据提供程序
  • MySQL数据库
  • MySQL ODBC连接器

使用代码

首先,添加对Microsoft ODBC的引用。然后使用该using microsoft.odbc语句告诉它您要使用MS ODBC。简而言之,OdbcConnection将用于打开连接,OdbcCommand执行查询以及OdbcDataReader读取结果行集。下面显示的代码记录了每个步骤。您会注意到,它运行MySQL特定的命令SHOW TABLES来获取表列表。然后,它将基于该特定表运行另一个查询SHOW COLUMNS IN CURRENT_TABLE。这就是所有代码。

代码

/*/////////////////////////////////////////////////////////////////////////
//
@@  Function:
@f    ::PrepareSchema
//
@@  Description:
@d    when this is called the widget is updated and everything
//    about this database and tables are displayed  
//
@@  Type:
@t    public 
//
@@  Arguments:
//    none.
@@  Returns:
@r    void
//
@@  Preconditions:
@c    Provided that the GUI is running and DB Connection is made.
//
@@  Postconditions:
@o    DB schema displayed  
//
@@  References:
@e    <A href="http://www.pcquest.com/content/linux/handson/102031401.asp" target=_blank>Query MySql with C#</A>. 
//
/////////////////////////////////////////////////////////////////////////*/

public void PrepareSchema()
{                                
    // create the connection object by setting the DSN                
    OdbcConnection ocConnection = new OdbcConnection("DSN="+ strDSN);
    
    // second connection is created so we could make 
    // queries while executing one
    OdbcConnection ocConnection2 = new OdbcConnection("DSN="+ strDSN);
    
    // this will open up both connections
    ocConnection.Open();
    ocConnection2.Open();
    
    // declare the commands for each table and column            
    OdbcCommand ocTableCommand;
    OdbcCommand ocColumnCommand;

    // create a command object. this will execute SHOW TABLES
    // query. In mysql, it shows all of the tables contained in
    // the database in use.
    ocTableCommand = new OdbcCommand("SHOW TABLES", ocConnection);
    
    // declare reader objects for tables and columns
    OdbcDataReader odrTableReader;
    OdbcDataReader odrColumnReader;
    
    // queries that return result set are executed by ExecuteReader()
    // If you are to run queries like insert, update, delete then
    // you would invoke them by using ExecuteNonQuery() 
    odrTableReader = ocTableCommand.ExecuteReader();
    
    // place create db statement in rich text box
    rchtxtSchema.Text += "CREATE DATABASE ";
    rchtxtSchema.Text += ocConnection.Database;
    rchtxtSchema.Text += ";\r\n\r\n";
    
    rchtxtSchema.Text += "USE DATABASE ";
    rchtxtSchema.Text += ocConnection.Database;
    rchtxtSchema.Text += ";\r\n\r\n";
    
    string strTable      = ""; 
    string strColumnName = "";
    string strColumnType = "";  
    string strColumnNull = "";   
    string strColumnPKey = "";  
    string strColumnDflt = "";  
    string strColumnExtr = "";  
    
    // reader the set of tables
    while(odrTableReader.Read()) 
    {           
        // here we are expecting rows with only 1 column 
        // containing the table name. that's why explcity
        // call GetString() at 0th index  
        strTable = odrTableReader.GetString(0);  
               
        rchtxtSchema.Text += "CREATE TABLE "; 
        rchtxtSchema.Text += strTable; 
        rchtxtSchema.Text += "\r\n(\r\n";
        
        // build up the command for each table
        ocColumnCommand = new OdbcCommand("SHOW COLUMNS IN " + 
          strTable, ocConnection2);
        
        // run the query
        odrColumnReader = ocColumnCommand.ExecuteReader();
        
        // reading the set of columsn
        while(odrColumnReader.Read()) 
        {         
            // This query returns the name of column, Type,
            // wherther it's Null, whether it's primary Key,
            // the default value, and extra info such as 
            // whether it's autoincrement or not           
            strColumnName = odrColumnReader.GetString(0);
            strColumnType = odrColumnReader.GetString(1); 
            strColumnNull = odrColumnReader.GetString(2);  
            strColumnPKey = odrColumnReader.GetString(3);
            //strColumnDflt = odrColumnReader.GetString(4);
            strColumnExtr = odrColumnReader.GetString(5);
            
            if (!strColumnNull.Equals("YES"))
                strColumnNull = " NOT NULL ";
            else
                strColumnNull = "";
                
            if (strColumnPKey.Equals("PRI"))
                strColumnPKey = " PRIMARY KEY ";
            
            //this.rchtxtSchema.Text += "\n";
            rchtxtSchema.Text += " ";
            rchtxtSchema.Text += strColumnName;
            rchtxtSchema.Text += " ";         
            rchtxtSchema.Text += strColumnType; 
            rchtxtSchema.Text += strColumnPKey; 
            rchtxtSchema.Text += strColumnNull;
            rchtxtSchema.Text += ",";                                 
            rchtxtSchema.Text += "\r\n";   
                    
        }
        
        rchtxtSchema.Text = this.rchtxtSchema.Text.Substring(0, 
            this.rchtxtSchema.Text.Length-3);                     
        rchtxtSchema.Text += "\r\n);\r\n\r\n";   
         
        // free up the reader object
        odrColumnReader.Close();
    }
    
    // close the reader    
    odrTableReader.Close();
    
    // disconnect
    ocConnection.Close(); 
    ocConnection2.Close();                      
}

兴趣点

最初,我一直在ODBC,ADODB和OLEDB之间来回实现。根据MySQL,使用OLEDB是不安全的。没有提及如何利用OLEDB执行简单的数据库任务。最后,决定在ODBC中这样做非常简单。您可能已经注意到,我使用show tables了特定数据库提供程序使用的内置命令(即)。我绝对愿意接受与MySQL兼容的任何建议或标准示例。

如何使用此演示

保存架构

首先,单击“ 选择目标数据库”。这将产生一个对话框,其中显示系统列表以及用户DSN。

DSN对话框

图2.0-描述了“ DSN”对话框。

现在,单击“ 将架构文件另存为”,然后选择要保存文件的位置。

文件保存对话框

图3.0-显示“文件保存”对话框。

接下来,确保选中“ 保存模式”。然后点击运行

运行状态

图4.0-描述了操作状态。在此示例中,程序成功编写了C:\ s01user38_schema.txt

查看架构

首先,取消选中“ 保存架构”,然后选中“ 查看架构”。它应该产生如图5.0所示的输出

模式视图

图5.0-描述s01user38的模式。

查看数据库

现在,单击“ 查看网格中的数据库”,然后按“运行”

网格中的数据库

图6.0-描述了查询结果。最初将显示+。您必须单击它以展开所有。然后它将显示该图所示的表。然后单击每个蓝色链接以查看它们包含的行集。

相关推荐

咨询软件
 
QQ在线咨询
售前咨询热线
QQ1922638