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

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. np.meshgrid

  2. jenkins报错Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password) 的处理

    问题背景:jenkins服务器发布代码后需要执行删除缓存的操作ssh -p222 eus_pe_devadmin@1.1.1.1 "sudo rm -rf /dev/shm/nginx/hi ...

  3. LLBLGen update table with join

    Table1 id Name 1 xxx 2 ooo Table2 Table1Id Table1Name Column1 Column2 Column3 1 sss xxxx xxxx xxxx 2 ...

  4. Python进阶之面向对象

    新式类与旧式类 区别: 在2.2版本之前所有的类都是旧式类,3.x版本已取消旧式类 旧式类一般的写法,不继承任何父类 class Person: def __init__(self, name): s ...

  5. 北京WINUI外包团队:长期开发各类基于WINUI框架应用项目

    今年早些时候的Build 2018中,微软高层表示,使用.NET Core 3.0,开发人员将获得使用WPF.Windows Forms和XAML Islands(WinForms和WPF应用程序中的 ...

  6. OpenStack-keystone命令行

    Keystone简介 Keystone(OpenStack Identity Service)是OpenStack框架中,负责身份验证.服务规则和服务令牌的功能, 它实现了OpenStack的Iden ...

  7. 重新安装Eclipse的一些配置

    工欲善其事,必先利其器.工具做好调整可以让我们事半功倍. 以下设置均在window-->preferences中 1.首先修改工作空间字符集为UTF-8 2.修改字体大小 3.修改Java代码提 ...

  8. 手撕面试官系列(二):开源框架面试题Spring+SpringMVC+MyBatis

    文章首发于今日头条:https://www.toutiao.com/i6712324863006081549/ 前言 跳槽时时刻刻都在发生,但是我建议大家跳槽之前,先想清楚为什么要跳槽.切不可跟风,看 ...

  9. 【C++札记】内联函数

    概述 函数的使用使得相同代码不必多次重写,但会带来额外的开销,函数调用的过程中会有入栈和出栈,这些都会消耗时间. 如果一个函数在程序运行过程中被成千上万次调用,那么这个开销也是不容忽视的,C++中引入 ...

  10. Asp.Net Core异常处理

    本文将介绍在ASP.Net Core中处理异常的几种方法 1使用开发人员异常页面(The developer exception page) 2配置HTTP错误代码页 Configuring stat ...