C#WinForm连接本地或远程Sql数据库,并进行简单操作。

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/hsk_scnu/article/details/51628354

在学习C#课程时,看到课本有相关内容的介绍。想起如果自己能做一个操作数据库的小软件应该不错。

所需要的知识基础就是sql的一些语句和C#的ADO.NET。

主要就是Connection、Command、DataReader和Dataset,还有就是DataAdapter等封装好的类。

还有就是一些基本控件的用法。如dataGridView,comboBox,button等。

做的过程中,遇到挺多问题de,解决之后能学到很多东西。

1.

    使用ADO.NET访问数据库,首先就是要建立与数据库的连接。在学习的过程中,发现整个小软件要做很多次与数据库的连接和断开。所以这部分是最基础的内容。

    连接数据库,主要是使用SqlConnection类,创建该类的对象,用open()方法即可打开与数据库的连接。在连接中,要注意的就是创建SqlConnection对象时的连接字符。

    更改连接字符,即可连接不同的数据库。在写这个小软件的过程中,将连接字符的赋值和选择封装成一个类,因为要用到很多次。

下面是自己写的连接字符串的类。

namespace WindowsFormsApplication1
{
    class connect
    {
       
        String dbName;                                                    //数据库名称:
        String userName;
        String password;
        int flag;
        String sql1;
        String sql2;
        String sql3;
        String serverAddress1;
        public string Connect()
        {
            
            userName = Form7.userName1;                                    //Form7是登陆界面,从登陆界面获得账号,密码
            password = Form7.password1;                                    //
            flag = Form7.check;                                                                  //flag  在这里用于标记用户选的是那种验证登陆方式
            serverAddress1 = usersAdd.serverAddress;
            dbName = Form7.dbName1;     
            sql1 = "server=" + serverAddress1 + ";database=" + dbName + ";Uid=" + userName + ";Pwd=" + password + ";";     // SQL账号验证
            sql2 = "server=.;database=" + dbName + ";Trusted_Connection=SSPI";                                   // windows身份验证    

            if (flag == 0)                            // 0是 windows身份验证                   1是SQL账号验证
            {
                sql3 = sql2;
            }
            else
            {
                sql3 = sql1;
            }
            return sql3;
        }

2.与数据库建立链接之后,就是对数据库的一些操作。主要用SqlCommand类来实现。SqlCommand 和 DatdSet 的使用可以自行百度一下。
3.还有就是使用DataSet。DataSet可以作为非连接的数据缓存,他独立于数据源,将数据库的数据加载到DataSet中,为数据的操作做准备。

4.最后,就是使用DataAdapter,他是数据集DataSet与数据源之间的桥梁。例如,实现查询功能:

                SqlConnection con = new SqlConnection(sql3);                     //sql3是数据库链接字符
                SqlDataAdapter sda = new SqlDataAdapter(sql_3, con);             //sql_3是查询 限制语句
                DataSet ds = new DataSet();
                sda.Fill(ds, table_name);                                                         //装载
    主体功能的基本的知识就是以上这些。

    自己做了个如下的登陆界面。该界面可以选择连接本地或者远程的数据库,输入对应信息时,就可以连接数据库了,登录界面要注意对用户的输入进行合法性的校验。

   


    登陆后,主界面如下,有一些基本功能,如查询,修改和删除数据  数据库的备份与分离,附加数据库等。这些功能的实现参考了一下别人的代码。此外还有一些无聊的小工具。


    


    这部分的内容就学到这里啦,明天开始复习tcp/ip 快考试了。

    如果有人也在学连接数据库的,大家一起交流一下 。

    需要的 联系我微信:hsk710685973jq  (大家一起学习

    下面是我写的登陆界面的代码。可以选择连接本地或远程数据库。欢迎大家交流,教一下我这个菜鸟。

        

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.SqlClient; //用于连接sql数据库
using System.Threading;


namespace WindowsFormsApplication1
{
    public partial class Form7 : Form
    {
        public static int check = 0;                                                           //标记   用户选了  sql or  windows 认证
        public static string strCon = "";
        public static string userName1 = "";
        public static string password1 = "";
        public static string dbName1 = "";
        public int thread_control = 0;                                                   //用于监视文本框线程控制变量


        public Form7()
        {
            InitializeComponent();

        }

        private void Form7_Load(object sender, EventArgs e)
        {
            Control.CheckForIllegalCrossThreadCalls = false;
            textBox1.Text = "(local)";
            Thread th4 = new Thread(textBox1_monitor);                           //监控ip框的线程
            th4.IsBackground = true;
            th4.Start();
        }


        private void button2_Click(object sender, EventArgs t)
        {
            thread_control = 1;
            
            if (checkBox1.Checked == true)                // check 1 是勾选 windows认证的
            {
                strCon = "server=" + textBox1.Text + ";Initial Catalog =" + comboBox1.Text + ";Integrated Security=SSPI;Connection Timeout = 5;";
            }
            else if (checkBox2.Checked == true)          // 2 s是用密码
            {
                strCon = "server=" + textBox1.Text + ";Database=" + comboBox1.Text + ";Uid=" + textBox2.Text + ";Pwd=" + textBox3.Text + ";Connection Timeout = 5;";
            }                                                                                                                                                           //textBox2.Text, textBox3.Text,   分别是用户名 加密码  
            SqlConnection sqlcon = new SqlConnection(strCon);
            try
            {
                //记录账号密码
                userName1 = textBox2.Text;
                password1 = textBox3.Text;
                dbName1 = comboBox1.Text;
                sqlcon.Open();
                usersAdd windows7 = new usersAdd(dbName1, textBox1.Text);   //这是 下一个窗口
                windows7.Show();
                this.Hide();
            }
            catch (Exception e)
            {
                MessageBox.Show("请输入你要连接的数据库的信息\n " + "计算机说:  " + e.Message);
            }
            sqlcon.Close();
        }

        private void checkBox1_CheckedChanged(object sender, EventArgs e)
        {

            if (checkBox1.Checked)
            {
                checkBox1.Checked = true;
                checkBox2.Checked = false;
            }
            check = 0;
            textBox2.Text = textBox3.Text = null;
            if (checkBox1.Checked)
            {
                textBox2.Enabled = textBox3.Enabled = 确定.Enabled = false;
                checkBox2.Checked = false;
                Thread th = new Thread(Win);
                th.IsBackground = true;
                th.Start();
            }

        }

        public void Win()
        {
            string str = "server=" + textBox1.Text + ";database=master;Integrated Security=SSPI;Connection Timeout = 5;";
            comboBox1.DataSource = getTable(str);
            comboBox1.DisplayMember = "name";
            comboBox1.ValueMember = "name";
        }
        private void checkBox2_CheckedChanged(object sender, EventArgs e)
        {
            if (checkBox2.Checked)
            {
                checkBox1.Checked = false;
                checkBox2.Checked = true;
            }
            check = 1;
            textBox2.Enabled = textBox3.Enabled = 确定.Enabled = true;
            textBox2.Focus();
            comboBox1.Text = null;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Thread th1 = new Thread(SQL);
            th1.IsBackground = true;
            th1.Start();
        }

        public void SQL()
        {

            if (check == 1)
            {
                string str = "server=" + textBox1.Text + ";database=master;Uid=" + textBox2.Text + ";Pwd=" + textBox3.Text + ";Connection Timeout = 3;";
                comboBox1.DataSource = getTable(str);
            }
            else
            {
                MessageBox.Show("请勾选SQL身份验证选项");
            }
            comboBox1.DisplayMember = "name";
            comboBox1.ValueMember = "name";
        }


        public DataTable getTable(string str)
        {
            try
            {
                SqlConnection sqlcon = new SqlConnection(str);
                SqlDataAdapter da = new SqlDataAdapter("select name from sysdatabases ", sqlcon);
                DataTable dt = new DataTable("sysdatabases");
                da.Fill(dt);
                return dt;
            }
            catch (Exception hsk)
            {
                MessageBox.Show("您输入的账号密码信息可能有误\n" + "具体错误是:" + hsk.Message);
                return null;
            }
        }

        public void textBox1_monitor()                             //用于限制 ip登陆时 误选 windows认证 
        {
            try
            {
                while (thread_control != 1)
                {
                    if (textBox1.Text != "(local)" & textBox1.Text != "")
                    {
                        checkBox1.Enabled = false;
                    }
                    else
                    {
                        checkBox1.Enabled = true;
                    }
                }
            }
            catch
            {
            }
            
        }

        private void Form7_FormClosed(object sender, FormClosedEventArgs e)
        {
            thread_control = 0;                                                                         //让监视文本框的线程退出死循环
            Application.Exit();
        }


        private void checkBox2_Click(object sender, EventArgs e)
        {
            check = 1;
        }

        private void pictureBox1_Click(object sender, EventArgs e)
        {
            Form2 window1 = new Form2();
            window1.Show();
            this.Hide();
        }
  
    }
}

展开阅读全文

没有更多推荐了,返回首页