经常需要查一些信息,  想写视图来返回数据以提高效率,但是用试视图不能传参,只好想到改存储过程。记录一下语法,方便以后做项目时候想不起来了用。

1:传字段返回datatable

2: 传字段回一串字符

3: 传字符串返回datable

4:存储过程调用存储过程

5:存储过程里写分页

--加半个小时
(select dateadd(MINUTE,30,GETDATE() ))--UnLockTime 往后加半个小时 CONVERT(varchar(100), @UnLockTime, 20)

--转成可以拼接字符串的格式
set @strOutput='0~由于您最近输错5次密码已被锁定,请在'+CONVERT(varchar(100), @UnLockTime, 20) +'之后再尝试登录~'+CAST(@Id AS NVARCHAR(10))

1:传字段返回datatable

 //传字段返回datatable
USE [ ]
GO /****** Object: StoredProcedure [dbo].[proc_getIsAPProveRoleUserIdSelect] Script Date: 9/23/2019 10:35:46 AM ******/
SET ANSI_NULLS ON
GO SET QUOTED_IDENTIFIER ON
GO -- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: 添加工作组人员时查找满足条件的审批人信息
-- =============================================
ALTER PROCEDURE [dbo].[proc_getIsAPProveRoleUserIdSelect]
@ProjectId int, --项目id
@DepId int , --部门id
@RoleId1 int , --权限id
@RoleId2 int , --权限id
@RoleId3 int--权限id AS
BEGIN
select id from t_user where DepId=@DepId and State= and (RoleId=@RoleId1 or RoleId=@RoleId2 or RoleId=@RoleId3)
union
select id from t_user where id in (
select UserId as id from t_User_Project where ProjectId=@ProjectId and State=)
and (RoleId=@RoleId1 or RoleId=@RoleId2 or RoleId=@RoleId3) END
GO public static string getIsAPProveRoleUserId(int ProjectId, int DepId)
{
string Rtstr = "";
string strSql = string.Format("proc_getIsAPProveRoleUserIdSelect");
IList<KeyValue> sqlpara = new List<KeyValue>
{
new KeyValue{Key="@ProjectId",Value=ProjectId},
new KeyValue{Key="@DepId",Value=DepId},
new KeyValue{Key="@RoleId1",Value=Convert.ToInt32(UserRole.Administrators)},
new KeyValue{Key="@RoleId2",Value=Convert.ToInt32(UserRole.DepartmentLeader)},
new KeyValue{Key="@RoleId3",Value=Convert.ToInt32(UserRole.divisionManager) } };
DataTable dt = sqlhelper.RunProcedureForDataSet(strSql, sqlpara); if (dt != null && dt.Rows.Count > )
{
for (int i = ; i < dt.Rows.Count; i++)
{
Rtstr += dt.Rows[i]["id"].ToString() + ",";
}
}
if (Rtstr.Length > )
{
Rtstr = Rtstr.Remove(Rtstr.Length - , );
}
return Rtstr;
} /// <summary>
/// 带参数执行存储过程并返回DataTable
/// </summary>
/// <param name="str_conn">数据库链接名称</param>
/// <param name="str_sql">SQL脚本</param>
/// <param name="ilst_params">参数列表</param>
/// <returns></returns>
public DataTable RunProcedureForDataSet( string str_sql, IList<KeyValue> ilst_params)
{
using (SqlConnection sqlCon = new SqlConnection(connectionString))
{
sqlCon.Open();
DataSet ds = new DataSet();
SqlDataAdapter objDa = new SqlDataAdapter(str_sql, sqlCon);
objDa.SelectCommand.CommandType = CommandType.StoredProcedure;
FillPram(objDa.SelectCommand.Parameters, ilst_params);
objDa.Fill(ds);
DataTable dt = ds.Tables[];
return dt;
}
}

2: 传字段返回一串字符

 // 返回一串字符
GO /****** Object: StoredProcedure [dbo].[proc_LoginOutPut] Script Date: 9/23/2019 1:04:29 PM ******/
SET ANSI_NULLS ON
GO SET QUOTED_IDENTIFIER ON
GO -- =============================================
-- Author: <Author,,Name>
-- Create date: <-- ::,>
-- Description: <登录的方法>
-- 查询用户名是否存在,
-- 不存在:
-- 返回: 用户名或密码错误 请检查。
-- 存在:
-- 判断用户名和密码是否匹配
-- 匹配,看连续密码输入次数是否><
-- 是,清除次数, 直接登录获取更详细信息———————— 返回
-- 否:看解锁时间是否大于等于当前时间(是:清除解锁时间、清除次数、改状态0),返回详细信息
-- (否:返回,您当前处于锁定状态,请在XX时间后进行登录 )
-- 不匹配:
-- 根据account 查找id给该用户加一次锁定次数,判断有没有到5次,有:更改锁定状态和解锁时间
-- 没有:返回您输入的账号或密码错误 -- ============================================= ALTER PROCEDURE [dbo].[proc_LoginOutPut]
@Account varchar(), --账号
@Pwd varchar(), --密码
@strOutput VARCHAR() output --输出内容 --输出格式:~由于您最近输错5次密码已被锁定,请在XX之后再尝试登录~id。 id 不存在写0.存在写自己id
--~用户名或密码错误~id。
-- ~id~id
-- -~发生错误~id
-- -~发生错误 0不成功 登录成功
AS BEGIN
SET XACT_ABORT ON--如果出错,会将transcation设置为uncommittable状态
declare @PasswordIncorrectNumber int --连续密码输入次数
declare @Id int --用户id
declare @count int --用户匹配行数
declare @UnLockTime datetime --解锁时间 BEGIN TRANSACTION
-- 开始逻辑判断 ----------非空判断
if(@Account = '' or @Account is null or @Pwd='' or @Pwd is null) begin
set @strOutput='0~未获取到信息,请稍后重试~0'
return @strOutput
end
----------非空判断结束 else
begin
set @Id=(select id from t_user where Account=@Account or AdAccount=@Account)
-- :查询用户名是否存在
if @Id>--说明账号存在
begin
set @count=(select count(id) from t_user where (Account=@Account and Pwd=@Pwd) or (AdAccount=@Account and Pwd=@Pwd))
if @count=
begin
set @PasswordIncorrectNumber=(select PasswordIncorrectNumber from t_user where id=@Id)
--看连续密码输入次数是否> <
if @PasswordIncorrectNumber<
begin
--清除次数, 直接登录获取更详细信息———————— 返回
update t_user set PasswordIncorrectNumber= ,UnLockTime=null ,State=
from t_user where id=@Id
set @strOutput= '1~'+ '登录成功'+'~'+CAST(@Id AS NVARCHAR()) select CAST(@strOutput AS NVARCHAR()) end
else --次数大于5,已经被锁住
begin
-- 看解锁时间是否大于等于当前时间(是:清除解锁时间、清除次数、改状态0),返回详细信息
set @UnLockTime=(select [UnLockTime] from t_user where id=@Id)
if @UnLockTime>GETDATE()
begin
set @strOutput='0~由于您最近输错5次密码已被锁定,请在'+CONVERT(varchar(), @UnLockTime, ) +'之后再尝试登录~'+CAST(@Id AS NVARCHAR())
-- select @strOutput
end
else --清除解锁时间、清除次数、改状态0
begin
update t_user set PasswordIncorrectNumber= ,State=,UnLockTime=null
from t_user where id=@Id
set @strOutput= '1~'+ '登录成功'+'~'+CAST(@Id AS NVARCHAR())
select @strOutput
end
end end
else -- 账号和密码不匹配,但是属于我们系统用户 。
begin
-- 根据id给该用户加一次锁定次数,判断有没有到5次,有:更改锁定状态和解锁时间
update t_user set PasswordIncorrectNumber=PasswordIncorrectNumber+
from t_user where id=@Id
set @PasswordIncorrectNumber=(select PasswordIncorrectNumber from t_user where id=@Id)
if @PasswordIncorrectNumber>
begin
set @UnLockTime=(select dateadd(MINUTE,,GETDATE() ))--UnLockTime 往后加半个小时 CONVERT(varchar(), @UnLockTime, )
update t_user set State=,UnLockTime=@UnLockTime
from t_user where id=@Id -- State=1锁定, INSERT INTO t_user_Log (pId , Account , AdAccount , Pwd , Name , DepId , RoleId , Email , Tel , State , PasswordIncorrectNumber , UnLockTime , CreateUserId , NextUpdatePwdTime)
SELECT @Id,Account , AdAccount , Pwd , Name , DepId , RoleId , Email , Tel , State , PasswordIncorrectNumber , UnLockTime , CreateUserId , NextUpdatePwdTime
FROM t_user WHERE t_user.Id=@Id set @UnLockTime= CONVERT(varchar(), @UnLockTime, )
set @strOutput='0~由于您最近输错5次密码已被锁定,请在'+CONVERT(varchar(), @UnLockTime, ) +'之后再尝试登录~'+CAST(@Id AS NVARCHAR())
select @strOutput
end
else --
begin set @strOutput='0~用户名或密码错误'+'~'+CAST(@Id AS NVARCHAR())
select @strOutput
end
end
end
else --不存在 返回: ~不是我们用户,不用加登录日志。
begin
set @strOutput='2~不是我们用户,不用加登录日志'+'~0'
select @strOutput
end
end IF @@error <> --发生错误 BEGIN ROLLBACK TRANSACTION
set @strOutput='-1~发生错误~0' SELECT @strOutput END ELSE BEGIN COMMIT TRANSACTION --执行成功 RETURN SELECT @strOutput
END
END
GO //调用 /// <summary>
/// 检验用户账号
/// </summary>
/// <param name="user"></param>
/// <returns></returns>
public static string CheckUser(EnUser user)
{ string sql = string.Format("proc_LoginOutPut"); List<KeyValue> paralist = new List<KeyValue>();
paralist.Add(new KeyValue { Key = "@Account", Value = user.Account });
paralist.Add(new KeyValue { Key = "@Pwd", Value = user.Pwd });
object Objreturn = SQLHelper.RunProcedureForObject(sql, "strOutput", paralist);
String returnStr = "";
if (Objreturn != null)
{
returnStr = Objreturn.ToString(); }
if (returnStr.Length > )
{
return returnStr; }
else
{
return "";
}
} //sqlhelper /// <summary>
/// 带参数执行存储过程并返回指定参数
/// </summary>
/// <param name="str_conn">数据库链接名称</param>
/// <param name="str_sql">SQL脚本</param>
/// <param name="str_returnName">返回值的变量名</param>
/// <param name="ilst_params">参数列表</param>
/// <returns>存储过程返回的参数</returns>
public static object RunProcedureForObject( string str_sql, string str_returnName, IList<KeyValue> ilst_params)
{
using (SqlConnection sqlCon = new SqlConnection(connectionString))
{
sqlCon.Open();
SqlCommand sqlCmd = sqlCon.CreateCommand();
sqlCmd.CommandType = CommandType.StoredProcedure;
sqlCmd.CommandText = str_sql;
FillPram(sqlCmd.Parameters, ilst_params);
//添加返回值参数
SqlParameter param_outValue = new SqlParameter(str_returnName, SqlDbType.VarChar, );
param_outValue.Direction = ParameterDirection.InputOutput;
param_outValue.Value = string.Empty;
sqlCmd.Parameters.Add(param_outValue);
//执行存储过程
sqlCmd.ExecuteNonQuery();
//获得存过过程执行后的返回值
return param_outValue.Value;
}
}

3: 传字符串返回datable

 //传字符串返回datable
//加整段查询信息 USE [FormSystem]
GO /****** Object: StoredProcedure [dbo].[proc_FormOperationRecordManagepage] Script Date: 9/23/2019 1:06:14 PM ******/
SET ANSI_NULLS ON
GO SET QUOTED_IDENTIFIER ON
GO -- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description:
-- =============================================
ALTER PROCEDURE [dbo].[proc_FormOperationRecordManagepage]
@pagesize int,
@pageindex int,
@Str_filter NVARCHAR(MAX)
AS
BEGIN
DECLARE @sql NVARCHAR(MAX) ,
@num1 int,
@num2 int set @num1= @pagesize*(@pageindex-)+;
set @num2 =@pagesize*@pageindex;
set @sql='SELECT * FROM
(
SELECT
ROW_NUMBER() over( order by fr.OptTimestamp DESC) as Num,'; set @sql=@sql+' fr.[Id]
,tp.ProjectName
,td.DepName
,tf.FormName
,ud.UploadFileName
,fr.OptName
, tu1.Name as OptUserName
, tu2.Name as DownUserName
,[Operationtime]
,[OptTimestamp]
,fr.[Remark]
,ud.DownTime
,ud.Id as UploadDownloadId
FROM [FormSystem].[dbo].[t_FormOperationRecord] fr
left join t_UploadDownload ud on ud.id=fr.UploadDownloadId
left join t_Form tf on tf.id=ud.FormId
left join t_Project tp on tf.ProjectId=tp.Id
left join t_department td on tf.DepId=td.Id
left join t_user tu1 on tu1.Id=fr.OptUserId
left join t_user tu2 on tu2.Id=ud.DownUserId
where = ' --加表单名称查询条件 tf.State=
if(@Str_filter != '' or @Str_filter !=null)
set @sql=@sql+ @Str_filter; set @sql=@sql+' ) Info where Num between @a and @b ' EXEC sp_executesql @sql ,N'@a int , @b int', @a=@num1,@b=@num2
END
GO public static List<EnFormOperationRecord> GetFormOperationRecordList(int pageindex, int pagesize,
object str_filter)
{
string strSql = string.Format("proc_FormOperationRecordManagepage");
IList<KeyValue> sqlpara = new List<KeyValue>
{
new KeyValue{Key="@pagesize",Value=pagesize},
new KeyValue{Key="@pageindex",Value=pageindex},
new KeyValue{Key="@Str_filter",Value=str_filter}
};
DataTable dt = sqlhelper.RunProcedureForDataSet(strSql, sqlpara);
List<EnFormOperationRecord> list = new List<EnFormOperationRecord>();
if (dt != null && dt.Rows.Count > )
{
for (int i = ; i < dt.Rows.Count; i++)
{
EnFormOperationRecord tb = new EnFormOperationRecord();
tb.Num = Convert.ToInt16(dt.Rows[i]["Num"].ToString());
}
}
return list;
} /// <summary>
/// 带参数执行存储过程并返回DataTable
/// </summary>
/// <param name="str_conn">数据库链接名称</param>
/// <param name="str_sql">SQL脚本</param>
/// <param name="ilst_params">参数列表</param>
/// <returns></returns>
public DataTable RunProcedureForDataSet( string str_sql, IList<KeyValue> ilst_params)
{
using (SqlConnection sqlCon = new SqlConnection(connectionString))
{
sqlCon.Open();
DataSet ds = new DataSet();
SqlDataAdapter objDa = new SqlDataAdapter(str_sql, sqlCon);
objDa.SelectCommand.CommandType = CommandType.StoredProcedure;
FillPram(objDa.SelectCommand.Parameters, ilst_params);
objDa.Fill(ds);
DataTable dt = ds.Tables[];
return dt;
}
}

4:存储过程调用存储过程

 //存储过程调用存储过程

  USE[FormSystem]
GO /****** Object: StoredProcedure [dbo].[proc_SendEmail] Script Date: 9/23/2019 1:09:46 PM ******/
SET ANSI_NULLS ON
GO SET QUOTED_IDENTIFIER ON
GO -- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description:
-- =============================================
ALTER PROCEDURE[dbo].[proc_SendEmail]
@MailToAddress varchar() ,
@subTitle varchar(),
@msg varchar(max) ,
@SendUserId int ,
@ControlLevel int ,
@UploadDownloadId int,
@ReceivedUserId int
AS BEGIN
print @MailToAddress;
print @subTitle;
print @msg; if(len(@MailToAddress)>)
begin
EXEC msdb.dbo.sp_send_dbmail @recipients = @MailToAddress,
@copy_recipients= '',
--@blind_copy_recipients= '1634454@163.com',
@body= @msg,
@body_format= 'html',
@subject = @subTitle,
@profile_name = 'e-Form';
begin
insert into t_EmailLog(UploadDownloadId,
ReceivedUserId, SendResult, SendUserId, ControlLevel,
EmailContent, Email)
values(@UploadDownloadId, @ReceivedUserId, , @SendUserId,
@ControlLevel, @msg, @MailToAddress);
end
end
END
GO public static object Send(string Subject, string content, string adress, Ent_EmailLog EmailLog)
{
string sql = string.Format("proc_SendEmail");
List<KeyValue> paralist = new List<KeyValue>();
paralist.Add(new KeyValue { Key = "@MailToAddress", Value = adress });
paralist.Add(new KeyValue { Key = "@subTitle", Value = Subject });
paralist.Add(new KeyValue { Key = "@msg", Value = content });
paralist.Add(new KeyValue { Key = "@SendUserId", Value = EmailLog.SendUserId });
paralist.Add(new KeyValue { Key = "@ControlLevel", Value = EmailLog.ControlLevel });
paralist.Add(new KeyValue { Key = "@UploadDownloadId", Value = EmailLog.UploadDownloadId });
paralist.Add(new KeyValue { Key = "@ReceivedUserId", Value = EmailLog.ReceivedUserId });
object Objreturn = SQLHelper.ProcedureForObject(sql, paralist);
return Objreturn;
} /// <summary>
/// 带参数执行存储过程
/// </summary>
/// <param name="str_conn">数据库链接名称</param>
/// <param name="str_sql">SQL脚本</param>
/// <param name="ilst_params">参数列表</param>
public static object ProcedureForObject(string str_sql, IList<KeyValue> ilst_params)
{
//如果换到正式要把这里改成
using (SqlConnection sqlCon = new SqlConnection(connectionString2))
// using (SqlConnection sqlCon = new SqlConnection(connectionString))
{
sqlCon.Open();
SqlCommand sqlCmd = sqlCon.CreateCommand();
sqlCmd.CommandType = CommandType.StoredProcedure;
sqlCmd.CommandText = str_sql;
FillPram(sqlCmd.Parameters, ilst_params);
////添加返回值参数
//SqlParameter param_outValue = new SqlParameter(str_returnName, SqlDbType.VarChar, 100);
//param_outValue.Direction = ParameterDirection.InputOutput;
//param_outValue.Value = string.Empty;
//sqlCmd.Parameters.Add(param_outValue);
//执行存储过程
return sqlCmd.ExecuteNonQuery();
//获得存过过程执行后的返回值
//return param_outValue.Value;
}
}

5:存储过程里写分页

调用:

USE [eSystem]
GO

DECLARE @return_value int

EXEC @return_value = [dbo].[xsp_ination]
@tblName = N't_FormOperationRecord',
@strGetFields = N'Id,UploadDownloadId ,Operationtime,OptName',
@fldName = N'Id',
@PageSize = 10,
@PageIndex = 220,
@OrderType = 1

SELECT 'Return Value' = @return_value

GO

sql = "EXEC [dbo].[xsp_ination] \"tblNEWS\",\"*\",\"id\",40," + pindex.ToString() + ",1,\"iType=" + type.ToString();

SqlDataReader sr = ExecuteReader(sql);  
while (sr.Read())  
{  
   ...  
}  
sr.Close();

 CREATE PROCEDURE xsp_ination
(
@tblName varchar(),
@strGetFields varchar() = '*',
@fldName varchar()='',
@PageSize int = ,
@PageIndex int = ,
@OrderType bit = ,
@strWhere varchar() = ''
)
AS
BEGIN
declare @strSQL varchar()
declare @strTmp varchar()
declare @strOrder varchar()
SET NOCOUNT ON
if @OrderType !=
begin
set @strTmp = '<(select min'
set @strOrder = ' order by [' + @fldName +'] desc'
end
else
begin
set @strTmp = '>(select max'
set @strOrder = ' order by [' + @fldName +'] asc'
end
if @PageIndex =
begin
if @strWhere != ''
set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ ' from ' + @tblName + ' where ' + @strWhere + ' ' + @strOrder else
set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ ' from '+ @tblName + ' '+ @strOrder end
else
begin
set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ ' from ' + @tblName + ' where [' + @fldName + ']' + @strTmp + '(['+ @fldName + ']) from (select top ' + str((@PageIndex-)*@PageSize) + ' ['+ @fldName + '] from ' + @tblName + ' ' + @strOrder + ') as tblTmp)'+ @strOrder if @strWhere != ''
set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ ' from ' + @tblName + ' where [' + @fldName + ']' + @strTmp + '([' + @fldName + ']) from (select top ' + str((@PageIndex-)*@PageSize) + ' [' + @fldName + '] from ' + @tblName + ' where ' + @strWhere + ' ' + @strOrder + ') as tblTmp) and ' + @strWhere + ' ' + @strOrder end
print @strSQL
--EXEC (@strSQL)
if @@error= return
SET NOCOUNT OFF
END
GO

sqlserver存储过程里传字段、传字符串,并返回DataTable、字符串,存储过程调用存储过程。的更多相关文章

  1. SQLserver将查询的字段中的数据 拼接成字符串用逗号隔开

    ,,'') 将查询的字段中的数据 拼接成字符串用逗号隔开

  2. 后端传前端数据乱码(返回json字符串到前端)

    中文乱码的问题,在开发过程中难免会遇到,而在配置好编码之后,不管是数据库,还是其他地方都配置好统一UTF-8编码之后,后端从数据库取出数据传回前端,还会乱码,这里以ssm框架为例,因为是我自己遇到的, ...

  3. FineReport调用存储过程

    "总结一下本人在项目中遇到的问题,如何在数据库表名未知且作为一种查询条件的情况下查询出数据集,仅能通过FineReport+Oracle实现. 首先分析这个问题的条件和要求: 条件:只有一个 ...

  4. .net core EF Core 调用存储过程

    在这里,我们将尝试去学习一下 .net core EF Core 中调用存储过程. 我们知道,EF Core 是不支持直接调用存储过程的,那它又提供了什么样的方式去执行存储过程呢?有如下方法: 1.F ...

  5. Winform调用存储过程

    数据表及数据准备: create table Member ( MemberId int primary key identity(1,1), MemberAccount nvarchar(20) u ...

  6. jdbc中的Statement对象和Preparedstatement对象的区别,以及通过jdbc操作调用存储过程

    一. java.sql.*   和  javax.sql.*的包的类结构 |- Driver接口: 表示java驱动程序接口.所有的具体的数据库厂商要来实现此接口. |- connect(url, p ...

  7. mysql 调用存储过程及例子

    存储过程如同一门程序设计语言,同样包含了数据类型.流程控制.输入和输出和它自己的函数库. --------------------基本语法-------------------- 一.创建存储过程 c ...

  8. ASP调用存储过程访问SQL Server

     ASP调用存储过程访问SQL Server 2011-02-15 10:22:57 标签:asp 数据库 sQL 存储过程 Server ASP和存储过程(Stored Procedures)的文章 ...

  9. 关于用mybatis调用存储过程时的入参和出参的传递方法

    一.问题描述 a)         目前调用读的存储过程的接口定义一般是:void  ReadDatalogs(Map<String,Object> map);,入参和出参都在这个map里 ...

  10. ssh+c3p0调用存储过程、组拼STRUCT时仅使用一个connection的方法 c3p0代理类转原始类(connection)

    正常情况,我们会调用存储过程用hibernate提供的连接池代理连接类来调用存储过程,而用新建连接给存储过程组拼STRUCT. 但是这样感觉可以再一步的优化:调用存储过程与构建STRUCT用hiber ...

随机推荐

  1. [转]Vue-Devtools安装配置教程(献给伸手党)

    原文地址:https://blog.csdn.net/weixin_38654336/article/details/80790698 可以先看视频教程:链接 最简便的方法是用FQ来通过google应 ...

  2. 如何查看window 7/window 8 等系统 的激活状态?

    http://www.officezhushou.com/office-key/   Office激活密钥 Win+R 输入: slmgr.vbs -dlv 显示:最为详尽的激活信息,包括:激活ID. ...

  3. CentOS7.4安装ipython

    摘自:https://www.jianshu.com/p/aa93a0341c82 使用pip3安装ipython及其依赖包:pip3 install ipython在 .bashrc文件中添加环境变 ...

  4. Pytorch 类别平衡化处理

    采用  WeightedRandomSampler: def make_weights_for_balanced_classes(images, nclasses): count = [0] * nc ...

  5. 改进初学者的PID-测量的比例介绍

    最近看到了Brett Beauregard发表的有关PID的系列文章,感觉对于理解PID算法很有帮助,于是将系列文章翻译过来!在自我提高的过程中,也希望对同道中人有所帮助.作者Brett Beaure ...

  6. [LeetCode] 505. The Maze II 迷宫 II

    There is a ball in a maze with empty spaces and walls. The ball can go through empty spaces by rolli ...

  7. Kubernetes 监控方案之 Prometheus Operator(十九)

    目录 一.Prometheus 介绍 1.1.Prometheus 架构 1.2.Prometheus Operator 架构 二.Helm 安装部署 2.1.Helm 客户端安装 2.2.Tille ...

  8. Mysql中TO_DAYS函数

    原文地址:https://blog.csdn.net/sinat_19569023/article/details/50417273 SQL博大精深 TO_DAYS函数 返回一个天数! 啊哈?什么天数 ...

  9. jquery鼠标经过弹出层写法

    jquery鼠标经过弹出层写法<pre><div class="navitem"><a href="/index.php?c=news&am ...

  10. TP5 模型CURD

    ThinkPHP5的模型是一种对象-关系映射(Object / Relation Mapping ,简称 ORM)的封装,并且提供了简洁的ActiveRecord实现.一般来说,每个数据表会和一个“模 ...