C# and MySQl

一、安装mysql

可参考博主"日日言谧"的MySQL 8.0.18安装教程(windows 64位)
关于my.ini的配置我再补充一下

[mysqld]
# Set the SQL mode to strict 
sql-mode="NO_UNSIGNED_SUBTRACTION,NO_ENGINE_SUBSTITUTION"
#skip-grant-tables
# 设置3306端口
port=3306
# 设置mysql的安装目录
basedir=E:\MySQL
# 设置mysql数据库的数据的存放目录
datadir=E:\MySQL\Data
# 允许最大连接数
max_connections=200
# 允许连接失败的次数。
max_connect_errors=10
# 服务端使用的字符集为gbk
character-set-server=gbk
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
# 默认使用“mysql_native_password”插件认证
#mysql_native_password
default_authentication_plugin=mysql_native_password
#不对mysqld的导出做控制
secure_file_priv=""
[mysql]
# 设置mysql客户端默认字符集
default-character-set=gbk
[client]
# 设置mysql客户端连接服务端时默认使用的端口
port=3306
default-character-set=gbk

图形化MySQL管理工具推荐:Navicat

二、基础语法学习

直接上两篇帖子,这都是阅读量过万的
1.史上最全的mysql基础教程
2.MySQL数据库—SQL汇总
然后是书:《MySQL5.7从入门到精通》提取码: 1er7

原文地址:https://www.52pojie.cn/thread-902668-1-1.html
百度链接:https://pan.baidu.com/s/1VJarTgIf02uqfcnjVNdqHA > 提取码: 1er7

三、C# 连接MySQL

1.首先下载MySQL.Data程序包。

打开程序包管理控制台,输入

install-package mysql.data.entity -version 6.9.9

然后就自动下载了(要网络才行)
在这里插入图片描述

2.创建连接对象

我不会生产文章,我只是文章的搬运工,下面内容从官方文档中复制过来的,原文链接

MySqlConnection对象

为了使您的MySQL Connector / NET应用程序连接到MySQL数据库,它必须使用一个MySqlConnection对象建立连接 。

以下代码显示了如何创建连接对象

using System;
using System.Data;

using MySql.Data;
using MySql.Data.MySqlClient;

public class Tutorial1
{
    public static void Main()
    {
        string connStr = "server=localhost;user=root;database=world;port=3306;password=******";
        MySqlConnection conn = new MySqlConnection(connStr);
        try
        {
            Console.WriteLine("Connecting to MySQL...");
            conn.Open();
            // Perform database operations
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.ToString());
        }
        conn.Close();
        Console.WriteLine("Done.");
    }
}

当MySqlConnection被调用的构造函数,它返回一个连接对象,其用于后续的数据库操作。在进行任何其他操作之前,请先打开连接。在应用程序退出之前,通过调用Close 连接对象来关闭与数据库的连接。

有时,尝试对Open连接对象执行操作可能会失败,从而生成可以使用标准异常处理代码进行处理的异常。

3.数据库操作

我不会生产文章,我只是文章的搬运工,下面内容从官方文档中复制过来的,原文链接

与MySQL数据库建立连接后,下一步就是执行所需的数据库操作。这可以通过使用MySqlCommand对象来实现 。

您将看到如何创建MySqlCommand 对象。创建它之后,可以调用三种主要的感兴趣方法:

  • ExecuteReader查询数据库。结果通常会在MySqlDataReader由创建的对象中 返回 ExecuteReader。

  • ExecuteNonQuery 插入,更新和删除数据。

  • ExecuteScalar 返回单个值。

一旦一个MySqlCommand对象被创建,你会调用它以前的方法来进行数据库操作之一,如执行查询。通常将结果返回到MySqlDataReader对象中,然后进行处理,例如可能显示结果。以下代码演示了如何完成此操作。

using System;
using System.Data;

using MySql.Data;
using MySql.Data.MySqlClient;

public class Tutorial2
{
    public static void Main()
    {
        string connStr = "server=localhost;user=root;database=world;port=3306;password=******";
        MySqlConnection conn = new MySqlConnection(connStr);
        try
        {
            Console.WriteLine("Connecting to MySQL...");
            conn.Open();

            string sql = "SELECT Name, HeadOfState FROM Country WHERE Continent='Oceania'";
            MySqlCommand cmd = new MySqlCommand(sql, conn);
            MySqlDataReader rdr = cmd.ExecuteReader();

            while (rdr.Read())
            {
                Console.WriteLine(rdr[0]+" -- "+rdr[1]);
            }
            rdr.Close();
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.ToString());
        }

        conn.Close();
        Console.WriteLine("Done.");
    }
}

创建并打开连接后,代码将创建一个MySqlCommand对象。然后将要执行的SQL查询传递给 MySqlCommand构造函数。该 ExecuteReader方法然后用于生成 MySqlReader对象。该 MySqlReader对象包含在命令对象上执行的SQL生成的结果。一旦在MySqlReader 对象中获得了结果,就可以对其进行处理。在这种情况下,信息被while循环打印出来。最后,通过在MySqlReader对象上运行其Close方法来处理该对象。

在下一个示例中,您将看到如何使用该 ExecuteNonQuery方法。

执行ExecuteNonQuery 方法调用的过程更为简单,因为无需创建对象来存储结果。这是因为ExecuteNonQuery 仅用于插入,更新和删除数据。以下示例说明了对该Country表的简单更新 :

using System;
using System.Data;

using MySql.Data;
using MySql.Data.MySqlClient;

public class Tutorial3
{
    public static void Main()
    {
        string connStr = "server=localhost;user=root;database=world;port=3306;password=******";
        MySqlConnection conn = new MySqlConnection(connStr);
        try
        {
            Console.WriteLine("Connecting to MySQL...");
            conn.Open();

            string sql = "INSERT INTO Country (Name, HeadOfState, Continent) VALUES ('Disneyland','Mickey Mouse', 'North America')";
            MySqlCommand cmd = new MySqlCommand(sql, conn);
            cmd.ExecuteNonQuery();
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.ToString());
        }

        conn.Close();
        Console.WriteLine("Done.");
    }
}

构造查询,创建命令对象,并 ExecuteNonQuery在命令对象上调用方法。您可以使用mysql命令解释器访问MySQL数据库, 并验证更新是否正确执行。

最后,您将看到如何使用该ExecuteScalar 方法返回单个值。同样,这很简单,因为MySqlDataReader不需要对象来存储结果,所以只需一个简单的变量即可。以下代码说明了如何使用 ExecuteScalar:

using System;
using System.Data;

using MySql.Data;
using MySql.Data.MySqlClient;

public class Tutorial4
{
    public static void Main()
    {
        string connStr = "server=localhost;user=root;database=world;port=3306;password=******";
        MySqlConnection conn = new MySqlConnection(connStr);
        try
        {
            Console.WriteLine("Connecting to MySQL...");
            conn.Open();

            string sql = "SELECT COUNT(*) FROM Country";
            MySqlCommand cmd = new MySqlCommand(sql, conn);
            object result = cmd.ExecuteScalar();
            if (result != null)
            {
                int r = Convert.ToInt32(result);
                Console.WriteLine("Number of countries in the world database is: " + r);
            }

        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.ToString());
        }

        conn.Close();
        Console.WriteLine("Done.");
    }
}

本示例使用一个简单的查询来计数Country表中的行 。通过调用ExecuteScalar命令对象获得结果。

4.调用存储过程

我不会生产文章,我只是文章的搬运工,下面内容从官方文档中复制过来的,原文链接

本节说明如何使用存储过程。通过将数据库密集型操作放入存储过程中,可以为数据库应用程序定义API。您可以在多个应用程序和多种编程语言之间重用此API。此技术避免了重复数据库代码,在由于架构更改而进行更新,调整查询性能或为日志记录,安全性等添加新的数据库操作时节省时间和精力。在学习本教程之前,请熟悉创建各种存储例程的 CREATE PROCEDUREand CREATE FUNCTION语句。

就本教程而言,您将创建一个简单的存储过程,以查看如何从MySQL Connector / NET调用它。在MySQL Client程序中,连接到world数据库并输入以下存储过程:

DELIMITER //
CREATE PROCEDURE country_hos
(IN con CHAR(20))
BEGIN
  SELECT Name, HeadOfState FROM Country
  WHERE Continent = con;
END //
DELIMITER ;

通过在mysql命令解释器中键入以下内容,测试存储过程是否按预期工作:

CALL country_hos('Europe');

确认存储过程存在且正确后,您可以查看如何从Connector / NET访问它。

从连接器/ NET应用程序中调用存储过程类似于本教程前面介绍的技术。MySqlCommand创建了一个 对象,但没有使用SQL查询作为参数,而是使用存储过程的名称来调用。将MySqlCommand 对象设置为存储过程的类型,如以下代码片段所示:

string rtn = "country_hos";
MySqlCommand cmd = new MySqlCommand(rtn, conn);
cmd.CommandType = CommandType.StoredProcedure;

在这种情况下,存储过程要求您传递参数。

cmd.Parameters.AddWithValue("@con", "Europe");

该参数的值@con实际上可以来自用户输入控件,但为简单起见,在此示例中将其设置为静态字符串。

至此,一切都已设置好,您可以使用前面部分中学到的技术来调用例程。在这种情况下,使用对象的ExecuteReader方法 MySqlCommand。

以下代码显示了完整的存储过程示例。

using System;
using System.Data;

using MySql.Data;
using MySql.Data.MySqlClient;

public class Tutorial6
{
    public static void Main()
    {
        string connStr = "server=localhost;user=root;database=world;port=3306;password=******";
        MySqlConnection conn = new MySqlConnection(connStr);
        try
        {
            Console.WriteLine("Connecting to MySQL...");
            conn.Open();

            string rtn = "country_hos";
            MySqlCommand cmd = new MySqlCommand(rtn, conn);
            cmd.CommandType = CommandType.StoredProcedure;

            cmd.Parameters.AddWithValue("@con", "Europe");

            MySqlDataReader rdr = cmd.ExecuteReader();
            while (rdr.Read())
            {
                Console.WriteLine(rdr[0] + " --- " + rdr[1]);
            }
            rdr.Close();
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.ToString());
        }

        conn.Close();
        Console.WriteLine("Done.");
    }
}

在本节中,您已经了解了如何从Connector / NET调用存储过程。
最后是走过的坑

MYSQL 游标声明必须出现在处理程序声明之前,变量和条件声明之后。

-- 设置联合主键,表的数据引擎必须是myisam
alter table stock_code engine=myisam;
ALTER TABLE stock_code ADD CONSTRAINT PRIMARY KEY(code, zs);

错误:Data too long for column 'c1' at row 1
配置文件中加
sql-mode="NO_UNSIGNED_SUBTRACTION,NO_ENGINE_SUBSTITUTION"
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值