项目运行mysql语言

前置

注意vs中要引用mysql的类库。

MySqlCommand

  • MySqlCommand类代表了要在MySQL数据库上执行的SQL语句或存储过程。提供了许多方法来执行不同类型的SQL命令,比如查询(SELECT)、插入(INSERT)、更新(UPDATE)和删除(DELETE)。你可以创建一个MySqlCommand对象,并将要执行的SQL语句传递给它的构造函数,然后通过调用不同的方法来执行该命令。本文中通过它进行增删改查sql语句的创立

MySqlDataReader

  • MySqlDataReader类用于从MySQL数据库中读取查询结果。当你执行一个查询命令并且得到一个结果集时,你可以使用MySqlDataReader来逐行读取这个结果集中的数据。你可以调用Read()方法来移动到结果集中的下一行,并使用不同的方法(如GetInt32()、GetString()等)来获取每一列的值。MySqlDataReader提供了高效的数据读取功能,因为它一次只读取一行数据,而不是将整个结果集一次性加载到内存中。

Parameters.AddWithValue()

  • Parameters.AddWithValue() 是用于向 SQL 命令中添加参数的方法。
  • 在数据库操作中,有时候我们需要在 SQL 语句中使用参数,而不是直接将数值或字符串嵌入到 SQL 语句中。这样做的好处有两个方面:
  • 安全性:使用参数可以防止 SQL 注入攻击。如果直接将用户提供的数据嵌入到 SQL 语句中,恶意用户可能会利用这一点来执行恶意操作。而使用参数可以将用户输入的数据作为参数传递给 SQL 语句,数据库会将其视为数据而不是命令,从而避免了潜在的安全风险。
  • 清晰性:使用参数可以使 SQL 语句更加清晰和易读。参数的名称可以更好地表达数据的含义,使得代码更易于理解和维护。

reader.Read()

  • reader.Read() 是一个用于从数据库结果集中读取下一行数据的方法。
  • 在使用 MySqlDataReader 对象执行查询并获得结果集之后,通过调用 reader.Read() 方法可以逐行遍历结果集中的数据。每次调用该方法,它会尝试从结果集中读取下一行数据,并返回一个布尔值来指示是否成功读取了数据。
  • 如果成功读取了数据,reader.Read() 方法返回 true,这意味着结果集中还有更多的行可以读取。 如果结果集中没有更多的行可供读取(即已经读取到了结果集的末尾),那么 reader.Read() 方法会返回 false,表示已经到达了结果集的末尾,无法再读取更多的数据。
  • 因此,通常我们会在一个循环中使用 reader.Read() 方法来逐行读取结果集中的数据,直到 reader.Read() 返回 false,即结果集的末尾。在每次循环迭代中,我们可以使用其他方法(如 GetInt32()GetString() 等)从当前行中获取数据的值,并进行相应的处理

链接mysql数据库

它使用了MySQL Connector/NET库中的MySqlConnection类来建立与MySQL数据库的连接。

cs 复制代码
 static MySqlConnection conn= new MySqlConnection("server=localhost;User Id = root;passwrod=;Database=studymysql;Charset = utf8");
        conn.Open();
  • static MySqlConnection conn: 这声明了一个名为 conn 的静态变量,类型为 MySqlConnection,表示与MySQL数据库的连接。

  • new MySqlConnection("server=localhost;User Id=root;passwrod=;Database=studymysql;Charset=utf8"): 这是对 MySqlConnection 构造函数的调用,创建了一个新的 MySqlConnection 实例。它接受一个连接字符串作为参数。

    • server=localhost: 这指定了数据库服务器运行在本地机器上。
    • User Id=root: 这将用户名设置为 "root"。
    • passwrod=: 这里应该指定密码。但是,在这种情况下,密码似乎是空的,等号后面没有值。
    • Database=studymysql: 这指定要连接的数据库的名称,在这种情况下是 "studymysql"。
    • Charset=utf8: 这指定了连接使用的字符集

创建 MySqlCommand 对象,传递 SQL 语句和参数来执行数据库操作。然后通过调用 ExecuteNonQuery() 方法来实际执行这些操作。


增(Add)

cs 复制代码
    static void Add() {
        MySqlCommand cmd = new MySqlCommand("insert into userinfo set name='xixi',age=96 ", conn);
        cmd.ExecuteNonQuery();
        int id = (int)cmd.LastInsertedId;
        Console.WriteLine("Sql Insert Key:{0}", id);
    }
  • MySqlCommand cmd = new MySqlCommand("insert into userinfo set name='xixi',age=96 ", conn);:这一行创建了一个新的 MySqlCommand 对象,用于执行 SQL 语句。SQL 语句是一个 INSERT INTO 语句 ,将数据插入到名为 userinfo 的表中。数据包括 nameage 字段,分别设置为 'xixi' 和 96。这个 MySqlCommand 对象被连接到之前创建的 conn 变量,即与 MySQL 数据库的连接。

  • cmd.ExecuteNonQuery();:这一行执行了 SQL 命令 ,将 'xixi' 和 96 插入到 userinfo 表中。因为这是一个插入操作,所以使用了 ExecuteNonQuery() 方法,它不返回任何数据,只是执行 SQL 命令。

  • int id = (int)cmd.LastInsertedId;:这一行获取刚插入的数据的自增 ID。MySQL 中的自增 ID 可以通过 LastInsertedId 属性获取 。它被转换为整数类型,并存储在 id 变量中。


删(Delete)

cs 复制代码
    static void Delete() {
        MySqlCommand cmd = new MySqlCommand("delete from userinfo where id = 1", conn);
        cmd.ExecuteNonQuery();
        Console.WriteLine("delete done");
    }

它创建了一个 MySqlCommand 对象 cmd,用于执行 SQL 删除语句。这个 SQL 语句是 delete from userinfo where id = 1,意味着要删除 userinfo 表中 ID 为 1 的记录。

接着,它调用了 ExecuteNonQuery() 方法来执行删除操作。因为这是一个删除操作,所以使用了 ExecuteNonQuery() 方法,它不返回任何数据,只是执行 SQL 命令。

  • 它创建了一个 MySqlCommand 对象 cmd,用于执行 SQL 删除语句。这个 SQL 语句是 delete from userinfo where id = 1,意味着要删除 userinfo 表中 ID 为 1 的记录。
  • 接着,它调用了 ExecuteNonQuery() 方法来执行删除操作。因为这是一个删除操作,所以使用了 ExecuteNonQuery() 方法,它不返回任何数据,只是执行 SQL 命令。

cs 复制代码
        MySqlCommand cmd = new MySqlCommand("update userinfo set name=@name,age=@age where id =@id", conn);
        cmd.Parameters.AddWithValue("name", "xoxo");
        cmd.Parameters.AddWithValue("age", 123);
        cmd.Parameters.AddWithValue("id", 2);
        cmd.ExecuteNonQuery();
        Console.WriteLine("update done");
    }
  • 创建了一个 MySqlCommand 对象 cmd,用于执行 SQL 更新语句。这个 SQL 语句是 update userinfo set name=@name,age=@age where id =@id,意味着要更新 userinfo 表中 ID 为给定值的记录,将姓名和年龄更新为给定的值。
  • 使用 Parameters.AddWithValue() 方法添加参数到 SQL 命令中。这样做的好处是可以避免 SQL 注入攻击,并且使得 SQL 语句更加清晰和易读。在这个例子中,它添加了三个参数:@name@age@id,分别表示要更新的姓名、年龄和记录的 ID。
  • 调用了 ExecuteNonQuery() 方法来执行更新操作。

查(Query)

cs 复制代码
    static void Query() {
        MySqlCommand cmd = new MySqlCommand("select * from userinfo where age=66", conn);
        MySqlDataReader reader = cmd.ExecuteReader();
        while (reader.Read()) {
            int id = reader.GetInt32("id");
            string name = reader.GetString("name");
            int age = reader.GetInt32("age");
            Console.WriteLine(string.Format("sql result: id:{0} name:{1} age:{2}", id, name, age));
        }
    }
  • 创建了一个 MySqlCommand 对象 cmd,用于执行 SQL 查询语句。查询的是 userinfo 表中所有年龄为 66 的记录。SQL 查询语句是 "select * from userinfo where age=66" 这个 MySqlCommand 对象与之前创建的 conn 变量关联,表示它将在连接的数据库上执行查询操作。

  • MySqlDataReader 是用于读取查询结果集的对象。调用 ExecuteReader() 方法来执行查询,并将结果存储在一个 MySqlDataReader 对象 reader 中。

  • 在一个 while 循环中,它遍历查询结果集。每次调用 reader.Read() 方法,都会移动到结果集中的下一行数据。如果还有数据可读,则返回 true

  • 在循环内部,它使用 GetInt32()GetString() 方法从结果集中获取数据。根据列名(在这里是 "id"、"name" 和 "age"),它分别获取整数类型的 ID、字符串类型的姓名和整数类型的年龄。

相关推荐
AI人工智能+电脑小能手3 小时前
【大白话说Java面试题 第87题】【Mysql篇】第17题:分布式事务的实现原理?
java·数据库·分布式·mysql·面试
yyuuuzz3 小时前
独立站的技术基础与常见运维问题
大数据·运维·服务器·网络·数据库·aws
isyangli_blog5 小时前
OpenDayLight (Carbon 版本) 启动与组件安装
开发语言·php
vb2008115 小时前
FastAPI APIRouter
开发语言·python
Benszen5 小时前
KVM虚拟化解决方案
开发语言·perl
会编程的土豆5 小时前
Go 语言反射(Reflection)详解
开发语言·后端·golang
東雪木5 小时前
多线程与并发编程 专属复习笔记
java·开发语言·笔记·java面试
杨充5 小时前
1.3 浮点型数据设计灵魂
开发语言·python·算法
噜噜噜阿鲁~5 小时前
python学习笔记 | 11.3、面向对象高级编程-多重继承
java·开发语言
basketball6166 小时前
Go 语言从入门到进阶:4. 数组和MAP使用方法总结
开发语言·后端·golang