65.9K
CodeProject 正在变化。 阅读更多。
Home

SQL Browser

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.91/5 (25投票s)

2015年7月7日

CPOL

4分钟阅读

viewsIcon

53905

downloadIcon

3177

以专业的方式浏览您的 MMSQL 服务器表。

引言

这个主题的标题可能看起来有点奇怪,但没错,今天的文章是关于如何为 MMSQL 服务器数据库创建一个 SQL 表浏览器。

背景

要浏览您的表,您需要运行 SQL Server Management Studio,它需要大量的内存和时间才能在不同表之间跳转,这就是为什么很多人宁愿使用浏览器或其他工具以更好、更快、更容易的方式查看表。

所以这就是我创建这个示例的原因。

如何使用

嗯,这个项目包含许多不同的功能,因为它基于执行命令并将结果从 SQL Server Management Studio 导入到 datagridview 控件。

它基本如何工作?

非常简单,只需三个步骤,您就可以完成它

  1. 连接到 SQL 服务器。
  2. 执行命令。
  3. 导入已执行命令的结果。

让我们开始分部分解释它是如何工作的(包括图片)

正如您所见,被红色框起来的 groupbox 是我们将放置连接设置的地方

  • 服务器名称
  • 用户名
  • 密码

设置必须与您的 SQL Server 连接设置相同。

正确添加您的设置后,您必须使用“连接”按钮进行连接,这里是结果。

  • 您已连接。
  • 日志已更新。
  • 包含网格和浏览控件的 groupbox 已启用。
  • 数据库名称已导入。

很棒,不是吗?那么让我们解释一下它是如何工作的。

首先,创建 3 个 string 来存储您的连接设置

 public string server { get; set; }
 public string user { get; set; }
 public string pass { get; set; }

别忘了导入连接所需的命名空间,使用此代码

using System.Data.Sql;

现在,要使按钮正常工作,请在其内部添加此代码

server = s.Text;
            user = us.Text;
            pass = p.Text;
            Properties.Settings.Default.Save();
            str = @"Data Source=" + server + ";uid=" + user + ";pwd=" + pass;
            string selectCommandText = "select name from sys.databases order by name";
            SqlConnection selectConnection = new SqlConnection(str);
            DataTable dataTable = new DataTable();
       

现在设置已保存,您只需要添加一个 try..catch 语句来连接,但首先让我解释一下 selectCommandText 这个 string 的含义

select name from sys.databases order by name

这是一个查询,用于获取 SQL Server 中所有数据库的名称,并将它们添加到我们的 ComboBox 中,名为 databases,例如

现在将此代码附加到按钮的代码中

 try
            {
                selectConnection.Open();
                new SqlDataAdapter(selectCommandText, selectConnection).Fill(dataTable);
                selectConnection.Close();
                if (dataTable.Rows.Count > 0)
                {
                    databases.DataSource = (object)dataTable;
                    databases.DisplayMember = "name";
                    databases.ValueMember = "name";
                }
 catch (Exception ex)
            {
}

此代码将

  1. 连接到服务器。
  2. 执行我们的命令。
  3. 导入名为“name”的列下的行值,并将结果添加到 ComboBox 中。

连接并导入数据库名称后,如何导入表?

很简单,多亏了我们导入的名称列表,我们可以导入每个数据库中包含的表,只需选择一个数据库,例如

让我们将此代码添加到包含数据库的 ComboBoxSelectedIndexChanged 事件中

string str = @"Data Source=" + server + ";uid=" + user + ";pwd=" + pass;
            string selectCommandText = "USE "+databases.Text+" SELECT * FROM sys.Tables ";
            SqlConnection selectConnection = new SqlConnection(str);
            DataTable dataTable = new DataTable();
try
            {
                
                new SqlDataAdapter(selectCommandText, selectConnection).Fill(dataTable);
                if (dataTable.Rows.Count > 0)
                {
                    tables.DataSource = (object)dataTable;
                    tables.DisplayMember = "name";
                    tables.ValueMember = "name";
                }
catch (Exception ex)
            {
}

此代码很简单,它将再次连接(仅为避免连接丢失的风险)并再次执行命令,但这次的 SQL 命令不同

USE DATABASE_NAME SELECT * FROM sys.Tables

此命令将获取特定数据库中所有表的名称,我们的代码将简单地将名称添加到我们拥有的第二个 ComboBox 中(名为 tables)。

现在,在我们最终连接并获取要显示的表的坐标后,我们必须添加这个 string 变量来包含我们的导入命令

 public string Gcommand { get; set; }

现在双击按钮并将其中的代码添加到其中

 Gcommand = "USE " + databases.Text + " SELECT * FROM " + tables.Text;
          
            try
            {
                string str = @"Data Source=" + server + ";uid=" + user + ";pwd=" + pass;
                string selectCommandText = Gcommand;
                SqlConnection selectConnection = new SqlConnection(str);
                DataSet dataSet = new DataSet();
                selectConnection.Open();
                new SqlDataAdapter(selectCommandText, selectConnection).Fill(dataSet);
                selectConnection.Close();
                this.Table.DataSource = (object)dataSet.Tables[0];
                MessageBox.Show("Table '" + tables.Text + "' Imported successfully .", 
                                "Result", MessageBoxButtons.OK, MessageBoxIcon.Information);
                Logs.AppendText(Environment.NewLine+@"[*] Table imported 
                              using this following command : """+Gcommand+@"""");
            }
            catch (Exception)
            {             

            }

使用此按钮,我们将根据我们选择的数据库和表的坐标生成一个命令,例如

USE Students SELECT * FROM Students 
/*
selected database : Students
selected table : Students 
*/

SQL Management Studio 的结果

示例的结果

 

就这样,通常这已经足够了,但我还添加了另一个选项,允许您手动执行复杂命令,如何?

例如,您只想显示表中的一个列,您必须自己编写执行此操作的命令,例如

USE Students SELECT Name FROM Students
/*
selected database : Students
selected table : Students
selected column : Name
*/

在这种情况下,您要做的就是手动编写您的命令,如下面的示例所示

就是这样!

注释

  • 这个项目只是一个示例,您可以基于此项目构建一个复杂的项目。
  • 这个项目将节省您的内存。
  • 这个项目将节省您的时间。
  • 这个项目将使浏览您的表更加容易。
  • 演示可以自由分享(包括某些权利,如:Codeproject 的权利和我的信息)

历史

  • 2015年7月7日:初始版本
© . All rights reserved.