人工敲代码好累呀!经过近段时间的研究,发现程序可以有snippet来自定义,存储过程却不能得到有效解决,心里很堵!
近两天发现【动软】可以生成项目,网上有很多人有教程,我就不写了。不过还是推荐一下吧:能用官方的,尽量用官方的,毕竟权威一点!
研究发现官方有关于模板的说明,但没有生成mysql存储的模板,网上搜索了一下,有一个模板:mysql动软生成模板,谢谢作者辛勤的劳动!
但是这个模板有点小问题,再加上几个功能不适合我,于是自己再改了一下:
-- ------------------------------------------
-- MYSQL存储过程【动软】批量生成模板
-- 感谢【动软】作者
-- 感谢 其他 免费奉献代码的朋友
-- 以下代码大部分来自网上,但我写了详细的注释,同时更改了一些错误的地方。
-- 希望可以解决大家的问题,同时有不清楚的请联系QQ:876067467,email:876067467@qq.com
-- 我尽力给各位解答。
<#@ template language="c#" HostSpecific="True" #>
<#@ output extension= ".cs" #>
-- -----------------------------------
-- 指定的3种类型是datetime,timestamp和bit。
-- datetime,timestamp这2种类型后不跟长度
-- bit这种类型长度获取不了,而且将进行特殊处理
<#
TableHost host = (TableHost)(Host);
host.Fieldlist.Sort(CodeCommon.CompareByintOrder);
int columnCount=host.Fieldlist.Count;
string IdentityStr="id";
string specStr="datetime";
string specStr1="timestamp";
string specType="bit";
foreach (ColumnInfo c in host.Fieldlist)
{
if(c.IsIdentity)
{
IdentityStr=c.ColumnName.ToString().ToLower();
break;
}
}
#>
-- ------------------------------------------
-- 本表 最大的 ID_
DELIMITER //
DROP procedure IF EXISTS `proc_<#= host.GetDALClass(host.TableName) #>_GetMaxId`;
CREATE PROCEDURE `proc_<#= host.GetDALClass(host.TableName) #>_GetMaxId`()
COMMENT '本表 最大的 ID_'
BEGIN
SELECT MAX(Id) FROM <#= host.GetDALClass(host.TableName) #>;
END //
DELIMITER ;
-- ------------------------------------------
-- ID_ 是否存在
DELIMITER //
DROP procedure IF EXISTS `proc_<#= host.GetDALClass(host.TableName) #>_Exists`;
CREATE PROCEDURE `proc_<#= host.GetDALClass(host.TableName) #>_Exists`
($_Id int)
COMMENT ' ID_ 是否存在'
BEGIN
SELECT count(1) FROM <#= host.GetDALClass(host.TableName) #> WHERE Id=$_Id ;
END //
DELIMITER ;
-- ------------------------------------------
-- 表 添加记录
DELIMITER //
DROP procedure IF EXISTS `proc_<#= host.GetDALClass(host.TableName) #>_ADD`;
CREATE PROCEDURE `proc_<#= host.GetDALClass(host.TableName) #>_ADD`(
<#int updateI=1;
foreach (ColumnInfo c in host.Fieldlist)
{
if(c.IsIdentity) { #>
$_<#= c.ColumnName.ToString()#> <#=c.TypeName#> (<#=c.Length#>)
<#if (updateI!=columnCount){#>,<#}#><# }
else{ #>
<#if(c.TypeName==specStr || c.TypeName==specStr1){#>
$_<#= c.ColumnName.ToString() #> <#=c.TypeName#>
<#}else if(c.TypeName==specType){#>
$_<#= c.ColumnName.ToString() #> <#=c.TypeName#>(1)
<#}else{#>
$_<#= c.ColumnName.ToString() #> <#=c.TypeName#>(<#=c.Length#>)
<#}#>
<#if (updateI!=columnCount){#>,<#}#>
<#}
updateI++;
} #>
)
COMMENT '表 添加记录'
BEGIN
INSERT INTO <#= host.GetDALClass(host.TableName) #>(<#updateI=1; foreach (ColumnInfo c in host.Fieldlist)
{ if(c.IsIdentity) { updateI++;continue;} #><#= c.ColumnName.ToString().ToLower()#><#if (updateI!=columnCount){#>,<#}#>
<# updateI++;} #>
)VALUES(
<# updateI=1; foreach (ColumnInfo c in host.Fieldlist)
{ if(c.IsIdentity) { updateI++;continue;} #>
$_<#= c.ColumnName.ToString().ToLower()#><#if (updateI!=columnCount){#>,<#}#>
<# updateI++;} #>
);
# set $_<#=IdentityStr#>=last_insert_id();
select last_insert_id();
END //
DELIMITER ;
-- ------------------------------------------
-- 表 更新记录
DELIMITER //
DROP procedure IF EXISTS `proc_<#= host.GetDALClass(host.TableName) #>_Update`;
CREATE PROCEDURE `proc_<#= host.GetDALClass(host.TableName) #>_Update`(
<#updateI=1;
foreach (ColumnInfo c in host.Fieldlist)
{ #>
<#if(c.TypeName==specStr || c.TypeName==specStr1){#>
$_<#= c.ColumnName.ToString() #> <#=c.TypeName#>
<#}else if(c.TypeName==specType){#>
$_<#= c.ColumnName.ToString() #> <#=c.TypeName#>(1)
<#}else{#>
$_<#= c.ColumnName.ToString() #> <#=c.TypeName#>(<#=c.Length#>)
<#}#>
<#if (updateI!=columnCount){#>,<#}#>
<# updateI++;
}
#>)
COMMENT '更新记录'
BEGIN
UPDATE <#= host.GetDALClass(host.TableName) #> SET
<#updateI=1; foreach (ColumnInfo c in host.Fieldlist)
{ if(c.IsIdentity) { updateI++;continue;}#>
<#= c.ColumnName.ToString().ToLower()#>=$_<#= c.ColumnName.ToString().ToLower()#><#if (updateI!=columnCount){#>,<#}#>
<#updateI++; } #>
WHERE Id=$_Id ;
END //
DELIMITER ;
-- ------------------------------------------
-- 表 删除记录
DELIMITER //
DROP procedure IF EXISTS `proc_<#= host.GetDALClass(host.TableName) #>_Delete`;
CREATE PROCEDURE `proc_<#= host.GetDALClass(host.TableName) #>_Delete`(
$_Id int)
COMMENT '删除记录,指定ID_ '
BEGIN
DELETE FROM <#= host.GetDALClass(host.TableName) #>
WHERE Id=$_Id ;
END //
DELIMITER ;
-- ------------------------------------------
-- 表 获取某条记录,指定ID_
DELIMITER //
DROP procedure IF EXISTS `proc_<#= host.GetDALClass(host.TableName) #>_GetModel`;
CREATE PROCEDURE `proc_<#= host.GetDALClass(host.TableName) #>_GetModel`(
$_Id int)
COMMENT '获取某条记录,指定ID_'
BEGIN
SELECT
<# updateI=1;foreach (ColumnInfo c in host.Fieldlist)
{ #>
<#= c.ColumnName.ToString().ToLower()#><#if (updateI!=columnCount){#>,<#}#>
<#updateI++; } #>
FROM <#= host.GetDALClass(host.TableName) #>
WHERE Id=$_Id ;
END //
DELIMITER ;
-- ------------------------------------------
-- 表 获取字段信息
DELIMITER //
DROP procedure IF EXISTS `proc_<#= host.GetDALClass(host.TableName) #>_GetColumnInfo`;
CREATE PROCEDURE `proc_<#= host.GetDALClass(host.TableName) #>_GetColumnInfo`(
$_Id int,
$_ColumnName varchar(20))
COMMENT '获取字段信息'
BEGIN
set @sqlStr=CONCAT('SELECT ',$_ColumnName , ' FROM <#= host.GetDALClass(host.TableName) #> WHERE Id= ',$_Id);
PREPARE count_stmt FROM @sqlStr;
EXECUTE count_stmt;
END //
DELIMITER ;
-- ------------------------------------------
-- 表 获取所有记录
DELIMITER //
DROP procedure IF EXISTS `proc_<#= host.GetDALClass(host.TableName) #>_GetList`;
CREATE PROCEDURE `proc_<#= host.GetDALClass(host.TableName) #>_GetList`()
COMMENT '获取所有记录'
BEGIN
SELECT
<# updateI=1;foreach (ColumnInfo c in host.Fieldlist)
{ #>
<#= c.ColumnName.ToString().ToLower()#><#if (updateI!=columnCount){#>,<#}#>
<#updateI++; } #>
FROM <#= host.GetDALClass(host.TableName) #>;
END //
DELIMITER ;