C#连接数据库初学笔记

打开解决方案,首先添加MySQL文件目录下的Mysql.data的引用,写入以下代码:
此脚本最后会打印出要查询的表里的所有数据,要保证数据库名,和用户名密码都正确才可以,不然会报错

查询

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using MySql.Data.MySqlClient;
namespace test
{
    class Program
    {
        static void Main(string[] args)
        {
            //服务器地址,端口号,数据库名,用户名,密码
            string connect = "server=127.0.0.1;port=3306;database=sikidb;user=root;password=zzzzz;";
            MySqlConnection con = new MySqlConnection(connect); //开始跟数据库建立连接
          
            try
            {
                con.Open();//首先打开链接
                string sqlCmd = "select * from users";//查询整个表(SQL命令语句,不能写错,否则执行不了)
                //select id,username,registerdate from users 查询这个表里指定的列
              
                MySqlCommand cmd = new MySqlCommand(sqlCmd, con); //1:执行命令的语句,2:打开的通道连接
                //cmd.ExecuteNonQuery();//执行插入、删除操作
                //cmd.ExecuteScalar();//读取数据,和cmd.ExecuteReader()的区别是,这个返回单个的值
                //cmd.ExecuteReader();//读取数据,返回MySqlDataReader类型
                MySqlDataReader dataReader = cmd.ExecuteReader();
                //dataReader.Read();//读取表里的下一行数据,读取到返回true,没有下一行数据返回false
                int a = 0;
                while (dataReader.Read())
                {
                    a++;
                    Console.WriteLine(dataReader[0].ToString()+" " + dataReader[1].ToString()+ " " + dataReader[2].ToString());
                    if (dataReader[1].ToString() == "wer") //测试,找到这个叫wer的人在第几行数据
                    {
                        Console.WriteLine($"找到这个人了,在第{a}行数据");
                    }
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e.ToString());
            }
            finally
            {
                con.Close();
            }
           
            Console.ReadKey();
        }
    }
}

插入数据

static void InsertShuJu()
    {
        //服务器地址,端口号,数据库名,用户名,密码
        string connect = "server=127.0.0.1;port=3306;database=sikidb;user=root;password=zzzzz;";
        MySqlConnection con = new MySqlConnection(connect); //开始跟数据库建立连接
        try
        {
            con.Open();//首先打开链接
            string name = "aaa";
            string sqlCmd = "insert into users(username,password,registerdate) values('"+name+"','000','"+DateTime.Now+"')";//插入自定义用户名,密码,和当前时间
            MySqlCommand cmd = new MySqlCommand(sqlCmd, con); //1:执行命令的语句,2:打开的通道连接
            //cmd.ExecuteNonQuery();//执行插入、删除操作
         
            int result = cmd.ExecuteNonQuery();//返回值是数据库中受影响的数据行数,现在是插入一行,所以返回值会是1
        }
        catch (Exception e)
        {
            Console.WriteLine(e.ToString());
        }
        finally
        {
            con.Close();
        }
    }

更新数据

把命令改掉就可以了,undate指令可以更新数据,下面的命令意思是把id为11的用户名密码替换为kkkk,666

string sqlCmd = "update users set username='kkkk',password='666' where id='11'";

删除数据

把命令改掉就可以了,此命令意思是删除id=10的那条数据

string sqlCmd = "delete from users where id='10'";

拓展

另一种读取数据的方式:
指定读取的列的名字就可以了

Console.WriteLine(dataReader.GetInt32("id") + " " + dataReader.GetString("username") + " " + dataReader.GetString("password"));

实验 验证用户名密码是否存在

//验证用户名密码是否存在
static bool Verification(string username,string password)
{
    //服务器地址,端口号,数据库名,用户名,密码
    string connect = "server=127.0.0.1;port=3306;database=sikidb;user=root;password=zzzzz;";
    MySqlConnection con = new MySqlConnection(connect); //开始跟数据库建立连接
    try
    {
        con.Open();//首先打开链接
        string sqlCmd = "select * from users where username = @data1 and password = @data2";
        MySqlCommand cmd = new MySqlCommand(sqlCmd, con);
        cmd.Parameters.AddWithValue("data1", username);
        cmd.Parameters.AddWithValue("data2", password);
       
        MySqlDataReader dataReader = cmd.ExecuteReader();
        if (dataReader.Read())
        {
            return true;
          
        }
      
    }
    catch (Exception e)
    {
        Console.WriteLine(e.ToString());
    }
    finally
    {
        con.Close();
    }
    return false;
}

然后再主函数里做测试

static void Main(string[] args)
{
    //Reader();
    //InsertShuJu();
    //Update();
    //deleteShuJu();


    bool user = Verification("wer", "000"); //检测这个账号密码
    if (user)
    {
        Console.WriteLine("用户存在,允许登录");
    }
    else
    {
        Console.WriteLine("用户不存在,请重新输入账号密码");
    }
    Console.ReadKey();
}

完整代码

以下是整个 代码连接MySQL数据库的增删改查,检测用户账号密码是否存在的脚本

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using MySql.Data.MySqlClient;
namespace test
{
    class Program
    {
        static void Main(string[] args)
        {
            //Reader();
            //InsertShuJu();
            //Update();
            //deleteShuJu();
            bool user = Verification("wer", "000");
            if (user)
            {
                Console.WriteLine("用户存在,允许登录");
            }
            else
            {
                Console.WriteLine("用户不存在,请重新输入账号密码");
            }
            Console.ReadKey();
        }
        //验证用户名密码是否存在
        static bool Verification(string username,string password)
        {
            //服务器地址,端口号,数据库名,用户名,密码
            string connect = "server=127.0.0.1;port=3306;database=sikidb;user=root;password=zzzzz;";
            MySqlConnection con = new MySqlConnection(connect); //开始跟数据库建立连接
            try
            {
                con.Open();//首先打开链接
                string sqlCmd = "select * from users where username = @data1 and password = @data2";
                MySqlCommand cmd = new MySqlCommand(sqlCmd, con);
                cmd.Parameters.AddWithValue("data1", username);
                cmd.Parameters.AddWithValue("data2", password);
               
                MySqlDataReader dataReader = cmd.ExecuteReader();
                if (dataReader.Read())
                {
                    return true;
                  
                }
              
            }
            catch (Exception e)
            {
                Console.WriteLine(e.ToString());
            }
            finally
            {
                con.Close();
            }
            return false;
        }
        static void Reader() //查询数据
        {
            //服务器地址,端口号,数据库名,用户名,密码
            string connect = "server=127.0.0.1;port=3306;database=sikidb;user=root;password=zzzzz;";
            MySqlConnection con = new MySqlConnection(connect); //开始跟数据库建立连接
            try
            {
                con.Open();//首先打开链接
                string sqlCmd = "select * from users";//查询整个表(SQL命令语句,不能写错,否则执行不了)
                //select id,username,registerdate from users 查询这个表里指定的列
             
                MySqlCommand cmd = new MySqlCommand(sqlCmd, con); //1:执行命令的语句,2:打开的通道连接
                //cmd.ExecuteNonQuery();//执行插入、删除操作
                //cmd.ExecuteScalar();//读取数据,和cmd.ExecuteReader()的区别是,这个返回单个的值
                //cmd.ExecuteReader();//读取数据,返回MySqlDataReader类型
                MySqlDataReader dataReader = cmd.ExecuteReader();
                //dataReader.Read();//读取表里的下一行数据,读取到返回true,没有下一行数据返回false
                int a = 0;
                while (dataReader.Read())
                {
                    a++;
                    Console.WriteLine(dataReader.GetInt32("id") + " " + dataReader.GetString("username") + " " + dataReader.GetString("password"));
                    if (dataReader[1].ToString() == "wer") //测试,找到这个叫wer的人在第几行数据
                    {
                        Console.WriteLine($"找到这个人了,在第{a}行数据");
                    }
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e.ToString());
            }
            finally
            {
                con.Close();
            }
        }
        static void InsertShuJu() //增加数据
        {
            //服务器地址,端口号,数据库名,用户名,密码
            string connect = "server=127.0.0.1;port=3306;database=sikidb;user=root;password=zzzzz;";
            MySqlConnection con = new MySqlConnection(connect); //开始跟数据库建立连接
            try
            {
                con.Open();//首先打开链接
                string name = "aaa";
                //插入自定义用户名,密码,和当前时间
                string sqlCmd = "insert into users(username,password,registerdate) values('"+name+"','000','"+DateTime.Now+"')";
                MySqlCommand cmd = new MySqlCommand(sqlCmd, con); //1:执行命令的语句,2:打开的通道连接
                //cmd.ExecuteNonQuery();//执行插入、删除操作
             
                int result = cmd.ExecuteNonQuery();//返回值是数据库中受影响的数据行数,现在是插入一行,所以返回值会是1
            }
            catch (Exception e)
            {
                Console.WriteLine(e.ToString());
            }
            finally
            {
                con.Close();
            }
        }
        static void Update() //更新某一条指定数据
        {
            //服务器地址,端口号,数据库名,用户名,密码
            string connect = "server=127.0.0.1;port=3306;database=sikidb;user=root;password=zzzzz;";
            MySqlConnection con = new MySqlConnection(connect); //开始跟数据库建立连接
            try
            {
                con.Open();//首先打开链接
              
                string sqlCmd = "update users set username='kkkk',password='666' where id='11'";
                MySqlCommand cmd = new MySqlCommand(sqlCmd, con); //1:执行命令的语句,2:打开的通道连接
                //cmd.ExecuteNonQuery();//执行插入、删除操作
                int result = cmd.ExecuteNonQuery();//返回值是数据库中受影响的数据行数,现在是插入一行,所以返回值会是1
            }
            catch (Exception e)
            {
                Console.WriteLine(e.ToString());
            }
            finally
            {
                con.Close();
            }
        }
        static void deleteShuJu() //删除某一条指定数据
        {
            //服务器地址,端口号,数据库名,用户名,密码
            string connect = "server=127.0.0.1;port=3306;database=sikidb;user=root;password=zzzzz;";
            MySqlConnection con = new MySqlConnection(connect); //开始跟数据库建立连接
            try
            {
                con.Open();//首先打开链接
                string sqlCmd = "delete from users where id='10'";
                MySqlCommand cmd = new MySqlCommand(sqlCmd, con); //1:执行命令的语句,2:打开的通道连接
                //cmd.ExecuteNonQuery();//执行插入、删除操作
                int result = cmd.ExecuteNonQuery();//返回值是数据库中受影响的数据行数,现在是插入一行,所以返回值会是1
            }
            catch (Exception e)
            {
                Console.WriteLine(e.ToString());
            }
            finally
            {
                con.Close();
            }
        }
    }
}