【C#】利用C#窗体与SQL Server的连接、Treeview制作SQL Server数据库查看器

article/2025/9/23 19:55:48

实质上,本文的中心还是在讨论C#对SQL Server的增删改查,只是这次创新一点,配合Treeview制作SQL Server数据库查看器。

具体如下图:

根据SQL Server,Test数据库中的表的结构与内容:


编写一个对Test数据库的数据库查看器,点击相应的表则读取该表的内容:


其中上述的程序,点击根节点“Test数据库”是无效的,点击其子节点,则右方的组框改成相应的表名,

同时读出此表的内容。

在制作之前,请根据《【SQL Server】用户的设置与授权、sa用户登录、查询一个数据库中有多少张表》(点击打开链接)确保你的SQL Server以提供SQL身份验证,同时开一个对test拥有数据库操作权限的用户名pc与密码为admin的账户,否则下述不通过数据库路径连接SQL Server的方式可能会无效。

1、首先,解决方案含有的目录示意图如下所示:


其中DB.cs是我自己编写的数据库连接类,相当于M层的角色,采用了《【Java】利用单例模式、可变参数优化Java操作Mysql数据库、JDBC代码的写作》(点击打开链接)中单例的思想编写,确保数据库不会被多次连接占用系统的资源。具体代码如下:

using System;
using System.Collections.Generic;
using System.Text;
using System.Data;//DataTable用到
using System.Data.SqlClient;//一系列的数据库操作类用到namespace SQLServerConnection
{class DB : IDisposable{private SqlConnection sqlConnection;// 以下代码,保证该类只能有一个实例        // 在自己内部定义自己的一个实例,只供内部调用  private static DB db = null;// 这个类必须自动向整个系统提供这个实例对象  // 这里提供了一个供外部访问本class的静态方法,可以直接访问  public static DB getInstance(){if (db == null){db = new DB();}return db;}private DB()// 私有无参构造函数{sqlConnection = new SqlConnection("server=.\\SQLEXPRESS;uid=pc;pwd=admin;database=test");sqlConnection.Open();}//单例化结束public DataTable getBySql(string sql, Object[] param){//查询sql = String.Format(sql, param);//用字符串参数替换的形式防止注入SqlDataAdapter sqlDataAdapter = new SqlDataAdapter(new SqlCommand(sql, sqlConnection));DataTable dataTable = new DataTable();sqlDataAdapter.Fill(dataTable);return dataTable;}public DataTable getBySql(string sql){//无参数的查询SqlDataAdapter sqlDataAdapter = new SqlDataAdapter(new SqlCommand(sql, sqlConnection));DataTable dataTable = new DataTable();sqlDataAdapter.Fill(dataTable);return dataTable;}public void setBySql(string sql, Object[] param){ //无查询结果的修改sql = String.Format(sql, param);//用字符串参数替换的形式防止注入new SqlCommand(sql, sqlConnection).ExecuteNonQuery();}public void setBySql(string sql){ //无参数,无查询结果的修改new SqlCommand(sql, sqlConnection).ExecuteNonQuery();}public void Dispose(){//相当于析构函数sqlConnection.Close();//在C#中关闭数据库连接不能在类的析构函数中关,否则会抛“内部 .Net Framework 数据提供程序错误 1”的异常//通过实现C#中IDisposable接口中的Dispose()方法主要用途是释放非托管资源。}}
}

C#对SQL Server的查询很简单。与其它编程语言类似,先打开数据库,查完再关闭数据库连接。

只是,查出来的结果,C#是直接放到SqlDataAdapter中,再直接Fill方法填充到DataTable里面。

这里主要提供两个方法,一个是getBysql提供查询使用,也就是从SQL Server查数据使用,对应的则是setBySql,用作写数据的,虽然这个程序在后续没有任何要向数据库写的地方,也就是没有用到方法,但你感兴趣可以继续按照《【C#】ListView的使用,对Access数据库的增删改查》(点击打开链接)的思路做下去,进一步提供增删改的功能。

上述两个方法提供不同参数的重载,主要是用于应对带参数与不带参数的查询。

这里采用string.format("{0}{1}",new Object[]{"a","b"});将a,b分别替换{0}与{1}这个位置,防止任何形式的SQL注入。比如你补个and 1 or 1在后面是没叼用的,最终会形成where xx='and 1 or 1'。

同时由于C#规定不能在构造函数中关连接,这里只好实现IDisposable的接口了。

之后就是主窗体Form1了,布局及其所要修改的属性如下,相当于V层了:


最后是Form1.cs,相当于C层的代码,具体请看注释,承担将数据库的查询结果与其它组件连接起来的角色。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;namespace SQLServerConnection
{public partial class Form1 : Form{DB db;public Form1(){InitializeComponent();}//选择树节点触发private void treeView1_AfterSelect(object sender, TreeViewEventArgs e){if (e.Node.Parent != null)//剔除根节点,点击根结点是没有任何动作的!{string table_name = e.Node.Text;groupBox2.Text = "表" + table_name;listView1.Clear();//查表的信息DataTable table_info = db.getBySql("select name from syscolumns where id=object_id('{0}')", new Object[] { table_name });for (int i = 0; i < table_info.Rows.Count; i++){for (int j = 0; j < table_info.Columns.Count; j++){//生成表头listView1.Columns.Add(table_info.Rows[i][j] + "", listView1.Width / table_info.Rows.Count - 1, HorizontalAlignment.Left);}}//查表的内容DataTable table = db.getBySql("select * from [{0}]", new Object[] { table_name });listView1.BeginUpdate();//数据更新,UI暂时挂起,直到EndUpdate绘制控件,可以有效避免闪烁并大大提高加载速度  for (int i = 0; i < table.Rows.Count; i++){ListViewItem listViewItem = new ListViewItem();//生成每一列for (int j = 0; j < table.Columns.Count; j++){if (j <= 0){listViewItem.Text = table.Rows[i][j] + "";}else{listViewItem.SubItems.Add(table.Rows[i][j] + "");}}listView1.Items.Add(listViewItem);}listView1.EndUpdate();//结束数据处理,UI界面一次性绘制。  }}private void Form1_Load(object sender, EventArgs e){try{TreeNode root_node = new TreeNode();//建立节点root_node.Text = "Test数据库";treeView1.Nodes.Add(root_node);db = DB.getInstance();//初始化数据库查询单例DB.csDataTable table_name = db.getBySql("SELECT name FROM sysobjects WHERE (xtype = 'U')");//查询test数据库表有多少张表for (int i = 0; i < table_name.Rows.Count; i++)//遍历查询出来的结果表(视图){for (int j = 0; j < table_name.Columns.Count; j++){TreeNode treeNode = new TreeNode();treeNode.Text = table_name.Rows[i][j] + "";root_node.Nodes.Add(treeNode);//一一将查询结果,也就是表名添加到树节点}}}catch{MessageBox.Show(this.Text, "数据库出错!");Environment.Exit(1);}}}
}

上述展示了TreeView的使用。主要是对其节点TreeNode的操作,节点名称同样是Text,在节点下添加节点用父节点.Nodes.Add(子节点);

而ListView的具体使用,在《【C#】ListView的使用,对Access数据库的增删改查》(点击打开链接)中讲过了,这里不再赘述了。


http://chatgpt.dhexx.cn/article/k0RSmdVj.shtml

相关文章

获取文件夹内文件名字及源代码C#

获取文件夹内文件名字及源代码C# using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.IO; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks…

TreeView控件与SQL数据库的应用(遍历算法)

开发环境&#xff1a;WinXP SP3&#xff0c;VS2008&#xff0c;SQL2000 TreeView控件与SQL数据库的应用(遍历算法) (数据与TreeView的绑定及Treeview的增加、删除、修改、遍历等数据库的操作) 这个是数据库连接及一些操作数据库的方法&#xff0c;文件&#xff1a;SqlManager.c…

TreeView数据绑定

http://www.cnblogs.com/mgen/archive/2011/07/21/2113152.html [更新至V2]WPF&#xff1a;MVVM简单文件浏览器 源代码下载 2.0 下载页面 1.0 下载页面 注意&#xff1a;链接是微软SkyDrive页面&#xff0c;下载时请用浏览器直接下载&#xff0c;用某些下载工具可能无法下载 源…

C#界面设计之树目录TreeView的使用

还是先上效果图&#xff1a; 主要代码如下&#xff1a; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms;namespace TreeDemo {public partial c…

treeview 跨窗体拖拽功能的实现(一)

功能实现&#xff1a; 1.从工具窗体往任务窗体拖拽&#xff1b; 2.在任务窗体中改变节点的顺序&#xff1b; 3.右键复制节点&#xff0c;删除节点 工具窗体treeview1,&#xff1a; 涉及使用的事件&#xff1a;DragEnter&#xff0c; DragOver ,ItemDrag, NodeMouseDouble…

Virtual Treeview 安装以及入门

Virtual Treeview是一套Delphi下优秀的VCL控件&#xff0c;代码质量高&#xff0c;使用灵活、功能强大、性能非常好&#xff0c;可以用于表达Treeview和表格类数据。它的代码现在托管在google code上。 Virtual Treeview是一个“纯VCL”控件&#xff0c;这意味着它不是基于任何…

android treeview 树形结构,前端开发中,使用TreeView控件创建树形结构

原标题&#xff1a;前端开发中&#xff0c;使用TreeView控件创建树形结构 Wijmo是一款使用Type编写的新一代Java/HTML5控件集。它秉承触控优先的设计理念&#xff0c;在全球率先支持AngularJS&#xff0c;并提供性能卓越、零依赖的FlexGrid和图表等多个控件。 我们已经知道在Wi…

透透彻彻了解服务器技术

什么是服务器   服务器是一种高性能计算机&#xff0c;作为网络的节点&#xff0c;存储、处理网络上80&#xff05;的数据、信息&#xff0c;因此也被称为网络的灵魂。做一个形象的比喻&#xff1a;服务器就像是邮局的交换机&#xff0c;而微机、笔记本、PDA、手机等固定或移…

服务器的介绍

一 、IDC/机柜/物理server/云主机介绍 1.互联网数据中心 &#xff08;Internet Data Center&#xff09; 互联网数据中心图片 &#xff08;1&#xff09;IDC的简介 简称IDC&#xff0c;是电信部门利用已有的互联网通信线路、带宽资源&#xff0c;建立的标准化电信专业级机房环…

web服务器(技术讲解)

2.Web服务器&#xff08;技术讲解&#xff09; 1.ASP 微软&#xff1a;国内最早流行在HTML中嵌入了VB脚本&#xff0c;ASPCOM在ASP开发中&#xff0c;基本一个页面有几千行的业务代码&#xff0c;页面杂乱&#xff0c;维护成本非常高 2.PHP 开发速度很快&#xff0c;功能强…

关于服务器

初始服务器 云操作 以下是重装系统操作 出现黑窗口后&#xff1a; 输入—>sudo passwd命令–>输入密码&#xff08;密码不可见&#xff09;–>再次输入密码&#xff08;密码不可见&#xff09;–>su命令&#xff08;可使用root用户&#xff09;–>输入密码&…

云服务器简介

云服务器简介 一、云服务器二、云服务的灵魂——虚拟化三、云服务器ECS概念 一、云服务器 1、云服务器简介 云计算服务器又称为云服务器或云主机&#xff0c;是云计算服务体系中的一项主机产品&#xff0c;它有效地解决了传统物理主机与VPS服务中&#xff0c;存在的管理难度打…

服务器概述

1、什么是服务器&#xff1f; 服务器&#xff1a;分为服务器硬件和服务器软件。在硬件服务器&#xff08;计算机&#xff09;上安装服务器软件&#xff0c;才可以对外提供服务。 比如&#xff1a;让其他的计算机访问当前服务器&#xff0c;为其他的计算机提供服务。 &#xff…

服务器技术(三)--Nginx

Nginx介绍 Nginx是什么、适用场景 Nginx是一个高性能的HTTP和反向代理服务器&#xff0c;特点是占有内存少&#xff0c;并发能力强&#xff0c;事实上nginx的并发能力确实在同类型的网页服务器中表现较好。 Nginx专为性能优化而开发&#xff0c;性能是其最重要的考量&#xf…

2022年,服务器领域十大技术趋势

2020年&#xff0c;疫情的全球爆发对上半年服务器市场的出货量带来了不小的影响。但是随着下半年疫情逐渐得到控制以及数字化需求的激增&#xff0c;全球服务器市场呈现出非常不错的增长态势。 目前来看&#xff0c;服务器依然是数字化转型和云计算、互联网等技术发展基础&…

服务器端技术

简介&#xff1a; 服务器分为web服务器和应用服务器。Web服务器是离客户端最近的服务器&#xff0c;负责监听和处理HTTP请求。应用服务器比web服务器更靠近后端&#xff0c;主要处理复杂的业务逻辑和数据库的访问。 如果是静态资源&#xff08;例如HTML页面或图片&#xff09;…

云计算服务器技术概述

云计算服务器技术概述 概述 云主机也叫云服务器ECS (Elastic Compute Server)&#xff0c;是一种按需获取的云端服务器&#xff0c;提供高可靠、弹性扩展的计算资源服务&#xff0c;可以根据需求选择不同规格的CPU、内存、操作系统、硬盘和网络来创建云主机&#xff0c;满足个性…

什么是服务器 ?服务器常见的系统和技术有哪些?

就像他的名字一样&#xff0c;服务器在网络上为不同用户提供不同内容的信息、资料和文件。可以说服务器就是Internet网络上的资源仓库&#xff0c;正是因为有着种类繁多数量庞大内容丰富的服务器的存在&#xff0c;才使得Internet如此的绚丽多彩。 服务器的种类和功能: (1) WW…

“东数西算”下数据中心的液冷GPU服务器如何发展?

以云计算、大数据、人工智能、高性能计算、数据分析、数据挖掘等为首的新兴技术凭借其优越的便利性和稳定性开始为服务器市场带来新的生机活力&#xff0c;其中以GPU为首的AI服务器在一定程度上不仅重构现行的产业结构&#xff0c;也为整个市场带来了新的有效增量。那么服务器的…

服务器技术基础

服务器技术基础 服务器是计算机的一种&#xff0c;比普通计算机运行更快、负载更高、价格更贵。服务器在网络中为其它客户机&#xff08;如PC机、智能手机、ATM等终端甚至是火车系统等大型设备&#xff09;提供计算或者应用服务。服务器具有高速的CPU运算能力、长时间的可靠运行…