关于C#数据库连接的SqlConnection

一. 关于数据库连接的状态

可以对数据库连接对象conn的状态进行判断,如 conn.State == System.Data.ConnectionState.Open 

二.  关于Close()和Dispose的区别

Close() :使数据库连接对象的状态设为Closed,但不释放connectionString,这意味着我们再次连接只需要调用Open()方法即可

Dispose():使数据库连接对象的状态设为Closed,并且释放connectionString,这意味着如果我们想再次连接,需要重新初始化SqlConnection对象(实际上需要把SqlConnection对象的connectionString重新赋值即可),然后再调用Open即可打开

下面这个例子区分Close()、和 Dispose():

namespace WinFormsApp1
{
    internal static class Program
    {
        static void Main()
        {
            //Data Source 里写自己的服务器名;Initial Catalog里写数据库的名字;User ID 里写用户名;pwd里写自己的密码
            String connectionString = "Data Source=;Initial Catalog=;User ID=;pwd=";
            SqlConnection conn = new SqlConnection(connectionString);
            conn.Open();

            //Close()
            conn.Close();
            //Close()之后可以再次Open()
            conn.Open();
            if (conn.State == System.Data.ConnectionState.Open)
            {
                Console.WriteLine("数据库连接成功");//数据库连接成功
            }

            //Dispose()
            conn.Dispose();
            //1. Dispose() 后直接调用 Open()
            //conn.Open();//报错
            //Unhandled exception. System.InvalidOperationException: 
            //The ConnectionString property has not been initialized. ConnectionString未初始化
            //2. 如果想重新连接,就初始化conn.connectionSrting
            conn.ConnectionString = "Data Source=;Initial Catalog=;User ID=;pwd=";
            conn.Open();//此时不报错
            if (conn.State == System.Data.ConnectionState.Open)
            {
                Console.WriteLine("数据库连接成功");//数据库连接成功
            }
        }
    }
}

三. 基于WinForm对数据库连接测试

namespace WinFormsApp1
{
    public partial class Form1 : Form
    {
        //Data Source 里写自己的服务器名;Initial Catalog里写数据库的名字;User ID 里写用户名;
        //pwd里写自己的密码
        static string connectionStr = "Data Source=;Initial Catalog=;User ID=;pwd=";
        static SqlConnection conn = new SqlConnection(connectionStr);
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            if (conn.State == ConnectionState.Open)
            {
                textBox1.Text = "数据库已经处于连接状态";
                return;
            }
            try
            {
                conn.Open();
                if (conn.State == ConnectionState.Open)
                {
                    textBox1.Text = "数据库连接成功";
                }
            }
            catch (Exception exception)
            {
                textBox1.Text = "数据库连接未被初始化";
                Console.WriteLine(exception.Message);
            }
        }

        private void button2_Click(object sender, EventArgs e)
        {
            try
            {
                conn.Close();
                if (conn.State == ConnectionState.Closed)
                {
                    textBox1.Text = "数据库连接已关闭";
                }
            }
            catch (Exception exception)
            {
                textBox1.Text = exception.Message;
                Console.WriteLine(exception.Message);
            }
        }

        private void button3_Click(object sender, EventArgs e)
        {
            try
            {
                conn.Dispose();
                textBox1.Text = "数据库连接已释放";
            } catch (Exception exception)
            {
                textBox1.Text = "数据库连接未被初始化";
                Console.WriteLine(exception.Message);
            }
        }
    }
}
  • 30
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值