在《【C#】利用C#窗体与SQL Server的连接、Treeview制作SQL Server数据库查看器》(点击打开链接)中使用了一种比较常用,也比较规范的,用Sql Server身份认证登录数据库的方式。然而,有时候,做些小型工程并不需要如此地规范,因为Sql Server搞一个用户实在是在麻烦了,具体见《【SQL Server】用户的设置与授权、sa用户登录、查询一个数据库中有多少张表》(点击打开链接),完全可以直接使用无密码的Windows身份验证直接连接SqlServer。
具体怎么做呢?下面用一个例子来说明这个问题,在test数据库中,有一张user_info表,如下图:
在C#窗体将这张表读出来,同时加点新的内容上去,C#窗体中的ListView能随窗体大小的变化而调节列宽:
具体布局、组件需要改变的属性、添加的事件如下,没有什么新内容,都在我之前的文章写过,ListView请看《【C#】ListView的使用,对Access数据库的增删改查》(点击打开链接),Anchor请看《【C#】用组件的Anchor属性解决最大化组件的缩放问题》(点击打开链接)
具体的代码如下:
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 SQLServerConnectionTest { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { //前加@的字符串,代表字符串所有的需要转义的字符,自动转义,这样,表达\,就不用像其它编程语言写成\\ SqlConnection sqlConnection = new SqlConnection(@"server=.\SQLEXPRESS;database=test;Trusted_Connection=SSPI;"); sqlConnection.Open(); //设置listview的表头 listView1.Columns.Add("序号", listView1.Width / 3 - 1, HorizontalAlignment.Left); listView1.Columns.Add("用户名", listView1.Width / 3 - 1, HorizontalAlignment.Left); listView1.Columns.Add("密码", listView1.Width / 3 - 1, HorizontalAlignment.Left); try { string sql = @"select * from [user_info]"; SqlDataReader sqlDataReader = new SqlCommand(sql, sqlConnection).ExecuteReader(); listView1.BeginUpdate();//数据更新,UI暂时挂起,直到EndUpdate绘制控件,可以有效避免闪烁并大大提高加载速度 for (int i = 1; sqlDataReader.Read(); i++)//遍历查询结果 { ListViewItem listViewItem = new ListViewItem(); listViewItem.Text = sqlDataReader.GetInt32(0) + "";//listview的每一行的第一项 listViewItem.SubItems.Add(sqlDataReader.GetString(1));//其余子项 listViewItem.SubItems.Add(sqlDataReader.GetString(2)); listView1.Items.Add(listViewItem);//将这行添加到listview中 } listView1.EndUpdate();//结束数据处理,UI界面一次性绘制。 } catch { MessageBox.Show("数据库出错!", this.Text); } sqlConnection.Close(); } private void Form1_Resize(object sender, EventArgs e) { //根据ListView的总大小平均分配各个列宽 for (int i = 0; i < listView1.Columns.Count; i++) { ColumnHeader columnHeader = listView1.Columns[i]; columnHeader.Width = listView1.Width / listView1.Columns.Count - 2; } /* //补充:按内容自动调节列宽 foreach (ColumnHeader columnHeader in listView1.Columns) { ch.Width = -1; } */ } } }
使用Windows身份验证连接SqlServer的字符串为:server=.\SQLEXPRESS;database=test;Trusted_Connection=SSPI;
对比于使用Sql Server身份验证的字符串为:server=.\SQLEXPRESS;uid=pc;pwd=admin;database=test;
其中,核心在于Trusted_Connection=SSPI;表示,无须使用密码,就能够访问Sql Server内容,
这是非常不安全的,一般不这样来连接数据库,但是,在一些自娱自乐或者一些简单的工程中,不妨使用这种方式,提高开发速度。