在数据库管理中,经常需要浏览和操作SQL Server中的表。通常,这需要运行SQL Server Management Studio,它需要大量的RAM和时间来在不同的表之间切换,这就是为什么很多人更喜欢使用其他方式来更快速、更轻松地查看表。
因此,创建了这个示例项目。
这个项目包含许多不同的功能,因为它基于执行命令并将结果从SQL Server Management Studio导入到datagridview控制器中。
非常简单,只需三个步骤即可完成:
如所见,被红色包围的组框是放置连接设置的地方:
设置必须与SQL Server连接设置相同。
在正确添加设置后,需要使用“连接”按钮进行连接,结果就会显示出来。
已连接。
日志已更新。
包含网格和浏览控制器的组框已启用。
数据库名称已导入。
令人惊叹,对吧?让解释一下它的工作原理。
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的字符串是什么意思:
SQL select name from sys.databases order by name
这是一个查询,用于获取SQL Server中所有数据库的名称,并将它们添加到ComboBox中,例如:
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)
{
}
这段代码将:
很简单,感谢导入的名称列表,可以导入它们每个包含的表,只需选择其中一个数据库,例如:
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命令有所不同:
SQL USE DATABASE_NAME SELECT * FROM sys.Tables
此命令将获取特定数据库中的所有表名称,代码将简单地将名称添加到拥有的第二个ComboBox中(称为tables)。
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)
{
}
使用这个按钮,将根据选择的数据库和表的坐标生成一个命令,例如:
SQL USE Students SELECT * FROM Students
/* 选定的数据库:Students 选定的表:Students */
SQL Management Studio的结果:
示例结果:
通常这就足够了,但添加了另一个选项,允许手动执行复杂命令,如何做到呢?
例如,只想在表中显示一列,需要自己编写执行此操作的命令,例如:
SQL USE Students SELECT Name FROM Students
/* 选定的数据库:Students 选定的表:Students 选定的列:Name */
在这种情况下,所要做的就是像下面的例子一样手动编写命令:
这个项目只是一个示例,可以基于它构建一个复杂的项目。