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

在《【C#】利用C#窗体与SQL Server的连接、Treeview制作SQL Server数据库查看器》(点击打开链接)中使用了一种比较常用,也比较规范的,用Sql Server身份认证登录数据库的方式。然而,有时候,做些小型工程并不需要如此地规范,因为Sql Server搞一个用户实在是在麻烦了,具体见《【SQL Server】用户的设置与授权、sa用户登录、查询一个数据库中有多少张表》(点击打开链接),完全可以直接使用无密码的Windows身份验证直接连接SqlServer。

具体怎么做呢?下面用一个例子来说明这个问题,在test数据库中,有一张user_info表,如下图:

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

在C#窗体将这张表读出来,同时加点新的内容上去,C#窗体中的ListView能随窗体大小的变化而调节列宽:

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

具体布局、组件需要改变的属性、添加的事件如下,没有什么新内容,都在我之前的文章写过,ListView请看《【C#】ListView的使用,对Access数据库的增删改查》(点击打开链接),Anchor请看《【C#】用组件的Anchor属性解决最大化组件的缩放问题》(点击打开链接)

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

具体的代码如下:

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内容,

这是非常不安全的,一般不这样来连接数据库,但是,在一些自娱自乐或者一些简单的工程中,不妨使用这种方式,提高开发速度。

你可能感兴趣的:(sql,数据库,server,ListView,C#,身份验证)