目录
1、 ParameterDirection.Input输入模式
2、 ParameterDirection.Output输出模式
3、 ParameterDirection.InputOutput输入和输出模式
4、 ParameterDirection.ReturnValue返回模式
涉及知识点:MySqlParamete -- MySQL的存储过程 -- MySQL的function
一、前提准备
1、配置App.config文件 -- 若文件未找到,则 Ctrl+Shift+A --> 添加 " 应用程序配置文件 "
<connectionStrings>
<add name="connStr"
connectionString="server=localhost;database=mysql_student;uid=root;pwd=123456"
providerName="MySql.Data.MySqlClient"/>
</connectionStrings>
2、导入Nuget包
3、引入using
using MySql.Data.MySqlClient;
using System;
using System.Configuration;
using System.Data;
4、创建MySQL 数据表
create table tb_student_information
(
id int,
name varchar(10),
no int
);
insert into tb_student_information
values (1,'小白',20),
(2,'小红',30),
(3,'小兰',35);
二、MySqlParameter 构造函数使用
需要配置的参数:
MySqlParameter.ParameterName = "@Name" ; //参数名称
MySqlParameter.Value = "小白"; //参数值
MySqlParameter.MySqlDbTyoe = MySqlDbType.VarChar; //参数类型
MySqlParameter.Size = 10; //参数占10个字节
MySqlParameter.Direction = ParameterDirection.Input; //默认输入状态
以下是MySqlParameter的五种构造方法:
internal class Program
{
static void Main(string[] args)
{
//param1.Direction 默认输入模式
//1.不带参数
MySqlParameter param1 = new MySqlParameter();
param1.ParameterName = "@Name"; //参数名称
param1.Value = "小白"; //参数的值
param1.MySqlDbType = MySqlDbType.VarChar; //参数类型
param1.Size = 10; //10个字节
param1.Direction = System.Data.ParameterDirection.ReturnValue;
//2.参数 值
MySqlParameter param2 = new MySqlParameter("@Name", "小白");
param2.MySqlDbType = MySqlDbType.VarChar;
param2.Size = 10;
//3.参数 类型
MySqlParameter param3 = new MySqlParameter("@Name", MySqlDbType.VarChar);
param3.Value = "小白";
param3.Size = 10;
//4.参数 类型 大小
MySqlParameter param4 = new MySqlParameter("@Name", MySqlDbType.VarChar, 10);
param4.Value = "小白";
//5.参数 类型 大小 源列名(对应DataTable中的列名)
MySqlParameter param5 = new MySqlParameter("@Name", MySqlDbType.VarChar, 10, "UName");
Console.WriteLine("Hello World!");
}
}
三、MySqlParameter 参数传入
cmd.Parameters.Add();//添加单个
cmd.Parameters.AddWithValue(); //添加单个(推荐)
cmd.Parameters.AddRange(); //添加多个
以下是参数添加的4中方法:
internal class Program
{
static void Main(string[] args)
{
//获取外部文件字符串
string connStr = ConfigurationManager.ConnectionStrings["connStr"].ConnectionString;
string sql = "select * from tb_student_information where name = @name";
using (MySqlConnection connect = new MySqlConnection(connStr))
{
MySqlCommand cmd = new MySqlCommand(sql, connect);
//1.普通传参数(单个)
MySqlParameter param = new MySqlParameter("@name", "小白");
cmd.Parameters.Add(param);
//2.普通传参数(单个)
cmd.Parameters.Add(new MySqlParameter("@name", "小白"));
//3.快捷传参数(单个)(推荐)
cmd.Parameters.AddWithValue("@name", "小白");
//4.多个参数传入
MySqlParameter[] parames = {
new MySqlParameter("@name","小白")
};
cmd.Parameters.AddRange(parames);
}
Console.WriteLine("Hello World!");
}
}
四、ParameterDirection 参数方向的使用
参数:
ParameterDirection.Input -- 是默认的模式,应用于任何场合
ParameterDirection.Output -- 应用于数据的"存储过程", --- 获取输出的值
ParameterDirection. InputOutput -- 应用于数据的"存储过程", --- 值可以输入也可输出
ParameterDirection.ReturnValue -- 在SQL Sever 的"存储过程可用",但MySQL的"存储过程"不可以,只可以使用MySQL的function, ---- 获取返回值
应用“存储过程”时,需额外配置:
cmd.CommandType = CommandType.StoredProcedure; //命令类型:存储过程
param.Direction = ParameterDirection.InputOutput; //参数方向
1、 ParameterDirection.Input输入模式
修改前数据库数据:
C#对MySQL的操作: -- C#代码
internal class Program
{
static void Main(string[] args)
{
//获取外部文件字符串
string connStr = ConfigurationManager.ConnectionStrings["connStr"].ConnectionString;
string sql = "select * from tb_student_information where name = @name";
using (MySqlConnection connect = new MySqlConnection(connStr))
{
MySqlCommand cmd = new MySqlCommand(sql, connect);
MySqlParameter param = new MySqlParameter("@name", MySqlDbType.VarChar, 10);
param.Value = "小白";
param.Direction = ParameterDirection.Input; //参数方向传入
cmd.Parameters.Add(param);
connect.Open();
object obj = cmd.ExecuteScalar();
connect.Close();
Console.WriteLine(obj.ToString());
}
Console.WriteLine("Hello World!");
}
}
结果:
2、 ParameterDirection.Output输出模式
修改前数据库数据:
MySQL数据库中的数据过程配置: -- MySQL 代码
delimiter $$
create procedure GetName(id int, out name varchar(10))
begin
select tb_student_information.name into name
from tb_student_information
where tb_student_information.id = id;
end $$
C#对MySQL的操作: -- C#代码
internal class Program
{
static void Main(string[] args)
{
//获取外部文件字符串
string connStr = ConfigurationManager.ConnectionStrings["connStr"].ConnectionString;
using (MySqlConnection connect = new MySqlConnection(connStr))
{
MySqlCommand cmd = new MySqlCommand("GetName", connect);
cmd.CommandType = CommandType.StoredProcedure; //命令类型:存储过程
cmd.Parameters.AddWithValue("id", 2);
MySqlParameter param = new MySqlParameter("name", MySqlDbType.VarChar, 10);
param.Direction = ParameterDirection.Output; //参数方向:输出
cmd.Parameters.Add(param);
connect.Open();
cmd.ExecuteScalar();
connect.Close();
Console.WriteLine(param.Value.ToString());
}
Console.WriteLine("Hello World!");
}
}
结果显示:
3、 ParameterDirection.InputOutput输入和输出模式
修改前数据库数据:
MySQL数据库中的数据过程配置: -- MySQL 代码
delimiter $$
create procedure GetName1(id int,inout name varchar(10))
begin
declare sname varchar(10) default 'no';
select tb_student_information.name into sname
from tb_student_information
where tb_student_information.id = id;
set name = concat(sname,name); #拼接字符串
end $$
C#对MySQL的操作: -- C#代码
internal class Program
{
static void Main(string[] args)
{
//获取外部文件字符串
string connStr = ConfigurationManager.ConnectionStrings["connStr"].ConnectionString;
using (MySqlConnection connect = new MySqlConnection(connStr))
{
MySqlCommand cmd = new MySqlCommand("GetName1", connect);
cmd.CommandType = CommandType.StoredProcedure; //命令类型:存储过程
cmd.Parameters.AddWithValue("id", 2);
MySqlParameter param = new MySqlParameter("name", MySqlDbType.VarChar, 10);
param.Value = "同学";
param.Direction = ParameterDirection.InputOutput;
cmd.Parameters.Add(param);
connect.Open();
cmd.ExecuteScalar();
connect.Close();
Console.WriteLine(param.Value.ToString());
}
Console.WriteLine("Hello World!");
}
}
结果显示:
4、 ParameterDirection.ReturnValue返回模式
注要事项:
1、SQL sever 的"存储过程" 只可以返回int类型
2、MySQL 的"存储过程",没有return,只能用function, 但他可以获取所有类型 3、(第一次使用function可能会出现)这里创建函数时可能会遇到错误:ERROR 1418 (HY000): This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled(you* might* want to use the less safe log_bin_trust_function_creators variable)
解决方式: set global log_bin_trust_function_creators=TRUE;
修改前数据库数据:
MySQL数据库中的数据过程配置: -- MySQL 代码
create function returnId( sid int) returns varchar(10)
begin
declare sname varchar(10);
select tb.name into sname
from tb_student_information as tb
where tb.id = sid;
return sname;
end $$
C#对MySQL的操作: -- C#代码
internal class Program
{
static void Main(string[] args)
{
//获取外部文件字符串
string connStr = ConfigurationManager.ConnectionStrings["connStr"].ConnectionString;
using (MySqlConnection connect = new MySqlConnection(connStr))
{
MySqlCommand cmd = new MySqlCommand("returnId", connect);
cmd.CommandType = CommandType.StoredProcedure; //命令类型:存储过程
MySqlParameter[] parames = {
new MySqlParameter("sid",1),
new MySqlParameter("sname",MySqlDbType.VarChar,10)
};
parames[1].Direction = ParameterDirection.ReturnValue; //参数方向:返回值
cmd.Parameters.AddRange(parames);
connect.Open();
cmd.ExecuteScalar();
connect.Close();
Console.WriteLine(parames[1].Value.ToString());
}
Console.WriteLine("Hello World!");
}
}
结果显示:
如有错误,烦请批评指正