csharp: MySQL Stored Procedure using DAL
# 建表 塗聚文 20160907
drop table attendrecord; create table attendrecord
(
seq INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
emp_no varchar(20) null,
rdate datetime not null,
rtime time not null,
rdescription varchar(100),
rdes_reasnon varchar(100),
branch varchar(50)
);
#存储过程
# 添加
DELIMITER $$
DROP PROCEDURE IF EXISTS `attend`.`proc_Insert_Attendrecord` $$
CREATE PROCEDURE `attend`.`proc_Insert_Attendrecord`
(
IN param1emp_no VarChar(20),
IN param1rdate Datetime ,
IN param1rtime Time,
IN param1rdescription VarChar(100),
IN param1rdes_reasnon VarChar(100),
IN param1branch VarChar(50)
)
BEGIN
INSERT INTO attendrecord
(
emp_no ,
rdate ,
rtime ,
rdescription ,
rdes_reasnon ,
branch
)
VALUES
(
param1emp_no ,
param1rdate ,
param1rtime ,
param1rdescription ,
param1rdes_reasnon ,
param1branch
); END $$
DELIMITER ; -- 添加
DELIMITER $$
DROP PROCEDURE IF EXISTS proc_Insert_Attendrecord $$
CREATE PROCEDURE proc_Insert_Attendrecord
(
IN param1emp_no VarChar(20),
IN param1rdate Datetime ,
IN param1rtime Time,
IN param1rdescription VarChar(100),
IN param1rdes_reasnon VarChar(100),
IN param1branch VarChar(50)
)
BEGIN
INSERT INTO attendrecord
(
emp_no ,
rdate ,
rtime ,
rdescription ,
rdes_reasnon ,
branch
)
VALUES
(
param1emp_no ,
param1rdate ,
param1rtime ,
param1rdescription ,
param1rdes_reasnon ,
param1branch
); END $$
DELIMITER ; #添加
DELIMITER $$
DROP PROCEDURE IF EXISTS proc_Insert_AttendrecordOutput $$
CREATE PROCEDURE proc_Insert_AttendrecordOutput
(
IN param1emp_no VarChar(20),
IN param1rdate Datetime,
IN param1rtime Time,
IN param1rdescription VarChar(100),
IN param1rdes_reasnon VarChar(100),
IN param1branch VarChar(50),
out param1seq int
)
BEGIN
INSERT INTO attendrecord
(
emp_no ,
rdate ,
rtime ,
rdescription ,
rdes_reasnon ,
branch
)
VALUES
(
param1emp_no ,
param1rdate ,
param1rtime ,
param1rdescription ,
param1rdes_reasnon ,
param1branch
);
SELECT LAST_INSERT_ID() into param1seq;
END $$
DELIMITER ;
/// <summary>
/// Attendrecord数据访问层
///生成時間2016-9-6 17:24:08
///塗聚文(Geovin Du) 自建代码生成器生成(简单存储过程也可以生成)
///</summary>
public class AttendrecordDAL : IAttendrecord
{
///<summary>
/// 追加记录 存储过程
///</summary>
///<param name="AttendrecordInfo"></param>
///<returns></returns>
public int InsertAttendrecord(AttendrecordInfo attendrecord)
{
int ret = 0;
try
{
MySqlParameter[] par = new MySqlParameter[]{
new MySqlParameter("?param1emp_no",MySqlDbType.VarChar,20),
new MySqlParameter("?param1rdate",MySqlDbType.Datetime),
new MySqlParameter("?param1rtime",MySqlDbType.String), //涂聚文注:不能用MySqlDbType.Time否则报错:base {System.Data.Common.DbException} = {"Only TimeSpan objects can be serialized by MySqlTimeSpan"}
new MySqlParameter("?param1rdescription",MySqlDbType.VarChar,100),
new MySqlParameter("?param1rdes_reasnon",MySqlDbType.VarChar,100),
new MySqlParameter("?param1branch",MySqlDbType.VarChar,50),
};
par[0].Value = attendrecord.Emp_no;
par[1].Value = attendrecord.Rdate;
par[2].Value = attendrecord.Rtime;
par[3].Value = attendrecord.Rdescription;
par[4].Value = attendrecord.Rdes_reasnon;
par[5].Value = attendrecord.Branch;
ret = DBHelper.ExecuteSql("proc_Insert_Attendrecord", CommandType.StoredProcedure, par);
}
catch (MySqlException ex)
{
throw ex;
}
return ret;
}
///<summary>
/// 追加记录 SQL脚本
///</summary>
///<param name="AttendrecordInfo"></param>
///<returns></returns>
public int InsertSqlAttendrecord(AttendrecordInfo attendrecord)
{
int ret = 0;
try
{
StringBuilder strSql = new StringBuilder();
strSql.Append("INSERT INTO attendrecord(emp_no,rdate,rtime,rdescription,rdes_reasnon,branch");
strSql.Append(") VALUES (");
strSql.Append("?param1emp_no ,?param1rdate ,?param1rtime ,?param1rdescription ,?param1rdes_reasnon ,?param1branch)");
MySqlParameter[] par = new MySqlParameter[]{
new MySqlParameter("?param1emp_no",MySqlDbType.VarChar,20),
new MySqlParameter("?param1rdate",MySqlDbType.Datetime),
new MySqlParameter("?param1rtime",MySqlDbType.String),
new MySqlParameter("?param1rdescription",MySqlDbType.VarChar,100),
new MySqlParameter("?param1rdes_reasnon",MySqlDbType.VarChar,100),
new MySqlParameter("?param1branch",MySqlDbType.VarChar,50),
};
par[0].Value = attendrecord.Emp_no;
par[1].Value = attendrecord.Rdate;
par[2].Value = attendrecord.Rtime;
par[3].Value = attendrecord.Rdescription;
par[4].Value = attendrecord.Rdes_reasnon;
par[5].Value = attendrecord.Branch;
ret = DBHelper.ExecuteSql(strSql.ToString(), CommandType.Text, par);
}
catch (MySqlException ex)
{
throw ex;
}
return ret;
}
类似于SQL Server中的:sp_executesql
sql server script:
IF EXISTS (SELECT * FROM sysobjects WHERE [name] = 'proc_Select_DuDeptUserCount')
DROP PROCEDURE proc_Select_DuDeptUserCount
GO
CREATE PROCEDURE proc_Select_DuDeptUserCount
(
@where NVARCHAR(1000)
)
AS
DECLARE @sql NVARCHAR(4000)
SET @sql='select count(*) as H from DuDeptUser '
IF @where<>''
SET @sql=@sql+@where
EXEC(@sql)
GO
MySql script:
#表有多少条记录 Geovin Du
DELIMITER $$
DROP PROCEDURE IF EXISTS proc_Select_AttendrecordCount $$
CREATE PROCEDURE proc_Select_AttendrecordCount
(
IN wherestr varchar(1000)
)
BEGIN
declare sqlstr varchar(2000);
set sqlstr='SELECT count(1) as H FROM attendrecord';
if wherestr='' then
set sqlstr=sqlstr;
else
set sqlstr=sqlstr+wherestr;
end if;
set @sqlstr=sqlstr;
-- call(sqlstr);
PREPARE stmt FROM @sqlstr;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END $$
DELIMITER ;
# 测试
call proc_Select_AttendrecordCount('');
#视图有多少条记录 涂聚文
DELIMITER $$
DROP PROCEDURE IF EXISTS proc_Select_AttendrecordCountView $$
CREATE PROCEDURE proc_Select_AttendrecordCountView
(
IN wherestr varchar(1000)
)
BEGIN
declare sqlstr varchar(2000);
set sqlstr='SELECT count(1) as H FROM View_attendrecord';
if wherestr='' then
set sqlstr=sqlstr;
else
set sqlstr=sqlstr+wherestr;
end if;
set @sqlstr=sqlstr;
-- call(sqlstr);
PREPARE stmt FROM @sqlstr;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END $$
DELIMITER ; #查询某记录的字段艺工作者Geovin Du
DELIMITER $$
DROP PROCEDURE IF EXISTS proc_Select_AttendrecordTitle $$
CREATE PROCEDURE proc_Select_AttendrecordTitle
( IN FieldName varchar(1000),
IN param1id int
)
BEGIN
declare sqlstr varchar(2000);
declare wherestr varchar(1000);
set sqlstr=CONCAT('select ',FieldName);
set wherestr=CONCAT(' from attendrecord WHERE seq =',cast(param1id as char(20)));
set sqlstr=CONCAT(sqlstr,wherestr);
set @sqlstr=sqlstr;
-- select @sqlstr;
-- call(sqlstr);
PREPARE stmt FROM @sqlstr; -- 5.1 up
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END $$
DELIMITER ; call proc_Select_AttendrecordTitle('rdescription',1); select concat(2); select cast(2 as char(20));
#模糊查询
DELIMITER $$
DROP PROCEDURE IF EXISTS proc_Select_AttendrecordFuzzySearch $$
CREATE PROCEDURE proc_Select_AttendrecordFuzzySearch
( IN FieldList varchar(1000),
IN wherestr varchar(2000)
)
BEGIN
declare sqlstr varchar(2000);
declare ifwherestr varchar(1000);
declare iflist varchar(1000);
set ifwherestr='';
if FieldList='' then
set iflist=' * ';
else
set iflist=FieldList;
end if;
if wherestr<>'' then
set ifwherestr=CONCAT(' WHERE ',wherestr);
end if;
set sqlstr=CONCAT('select ',iflist);
set sqlstr=CONCAT(sqlstr,' from attendrecord ');
set sqlstr=CONCAT(sqlstr,ifwherestr);
set @sqlstr=sqlstr;
-- select @sqlstr;
-- call(sqlstr);
PREPARE stmt FROM @sqlstr;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END $$
DELIMITER ; -- seq =1
call proc_Select_AttendrecordFuzzySearch('rdescription','seq=1');
csharp: MySQL Stored Procedure using DAL的更多相关文章
- csharp: Oracle Stored Procedure DAL using ODP.NET
paging : http://www.codeproject.com/Articles/44858/Custom-Paging-GridView-in-ASP-NET-Oracle https:// ...
- Retrieving Out Params From a Stored Procedure With Python
http://www.rodneyoliver.com/blog/2013/08/08/retrieving-out-params-from-a-stored-procedure-with-pytho ...
- JDBC连接执行 MySQL 存储过程报权限错误:User does not have access to metadata required to determine stored procedure parameter types. If rights can not be granted,
国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html 内部邀请码:C8E245J (不写邀请码,没有现金送) 国 ...
- Archive MySQL Data In Chunks Using Stored Procedure
sqladminon September 26, 2018 In a DBA’s day to day activities, we are doing Archive operation on ou ...
- Home / Python MySQL Tutorial / Calling MySQL Stored Procedures in Python Calling MySQL Stored Procedures in Python
f you are not familiar with MySQL stored procedures or want to review it as a refresher, you can fol ...
- [MySQL] Stored Procedures 【转载】
Stored routines (procedures and functions) can be particularly useful in certain situations: When mu ...
- Cursors in MySQL Stored Procedures
https://www.sitepoint.com/cursors-mysql-stored-procedures/ After my previous article on Stored Proce ...
- How To Call Stored Procedure In Hibernate
How To Call Stored Procedure In Hibernate In this tutorial, you will learn how to call a store proce ...
- 数据库之存储过程(Stored Procedure)【未完待续】
存储过程(Stored Procedure,以下简称SP)是啥?有什么用?优缺点? 一个SP是一段存储在数据库系统中的一条或多条sql语句的集合,类似一条批处理,它能被触发器,或者其他的SP以及APP ...
随机推荐
- .NET支持多平台后的一点拙见
我们目前对.NET的理解大部分可以归纳为:起初它是Java平台(注意是平台,不要跟Java语言搞混淆)的一个克隆品,后来慢慢演变,有了自己的特性.由于Java平台最显著的特点就是“平台独立性”(或者说 ...
- logistic回归
logistic回归 回归就是对已知公式的未知参数进行估计.比如已知公式是$y = a*x + b$,未知参数是a和b,利用多真实的(x,y)训练数据对a和b的取值去自动估计.估计的方法是在给定训练样 ...
- ASP.NET MVC 5 - 将数据从控制器传递给视图
在我们讨论数据库和数据模型之前,让我们先讨论一下如何将数据从控制器传递给视图.控制器类将响应请求来的URL.控制器类是给您写代码来处理传入请求的地方,并从数据库中检索数据,并最终决定什么类型的返回结果 ...
- Sql Server系列:子查询
1 子查询概念 子查询是嵌套在另一个查询中的普通T-SQL查询.在有一个SELECT语句通过使用小括号创建子查询,作为另一个查询的部分数据或条件的基础. 子查询通常用于满足以下某个需求: ◊ 将一个查 ...
- Entity Framework 6 Code First新特性:支持存储过程
Entity Framework 6提供支持存储过程的新特性,本文具体演示Entity Framework 6 Code First的存储过程操作. Code First的插入/修改/删除存储过程 默 ...
- SVM算法
本文主要介绍支持向量机理论推导及其工程应用. 1 基本介绍 支持向量机算法是一个有效的分类算法,可用于分类.回归等任务,在传统的机器学习任务中,通过人工构造.选择特征,然后使用支持向量机作为训练器,可 ...
- .NET平台开源项目速览(2)Compare .NET Objects对象比较组件
.NET平台开源项目速览今天介绍一款小巧强大的对象比较组件.可以更详细的获取2个对象的差别,并记录具体差别,比较过程和要求可以灵活配置. .NET开源目录:[目录]本博客其他.NET开源项目文章目录 ...
- Thrift简单实践
0.什么是RPC RPC(Remote Procedure Call - 远程过程调用),是通过网络从远程计算机上请求服务,而不需要了解底层网路技术的细节.简单点说,就是像调用本地服务(方法)一样调用 ...
- 最好的简明NodeJS学习材料
http://www.nodebeginner.org/index-zh-cn.html http://debuggable.com/posts/understanding-node-js:4bd98 ...
- 基于keepalived搭建MySQL的高可用集群
MySQL的高可用方案一般有如下几种: keepalived+双主,MHA,MMM,Heartbeat+DRBD,PXC,Galera Cluster 比较常用的是keepalived+双主,MHA和 ...