您的位置:首页 > 数据库

【C#】使用Windows身份验证连接Sql Server,ListView随窗体大小的变化而调节列宽

2016-01-05 10:56 597 查看
在《【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内容,

这是非常不安全的,一般不这样来连接数据库,但是,在一些自娱自乐或者一些简单的工程中,不妨使用这种方式,提高开发速度。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: