带参数的sql和不带参数的sql存储过程区别第1/2页

带参数的sql语句,在数据库端,执行的是
exec sp_executesql
eg:

exec sp_executesql N'insert into LCS_Sys_Model ([Model_GUID],[Model_Name],[Model_Desp],[Model_IsSys]) values ( @Model_GUID,@Model_Name,@Model_Desp,@Model_IsSys)', N'@Model_GUID uniqueidentifier,@Model_Name nvarchar(50),@Model_Desp nvarchar(500),@Model_IsSys bit', @Model_GUID = 'F3CD1369-58C0-4A1F-AF88-05FCF734E079', @Model_Name = N'测试实体模型', @Model_Desp = N'实体模型描述', @Model_IsSys = 0

没有带值的sql语句。其执行是直接的sql语句。
insert into lcs_Sys_Model ([Model_GUID],[Model_Name],[Model_Desp],[Model_IsSys]) values ( 'F3CD1369-58C0-4A1F-AF88-05FCF734E079','name','desp',1 )

看上面的执行代码,你会不会认为是下面的高效啊?说实话我也没有仔细测试过。可是据我所知,sqlserver能够缓存参数信息和sql编译后的信息,第一句带参 数的sql因为前面一部是不变的(红色部分)。所以能够缓存起来(就像执行存储过程一样)。而下面的一句sql。因为value后面的值总是不固定,因此 sqlserver总是认为是不同的sql语句。因此每次都要重新编译生成。

以上结论来源于下面的测试代码。

System.Data.SqlClient.SqlParameter[] parameters = {
new SqlParameter("@Model_GUID", SqlDbType.UniqueIdentifier),
new SqlParameter("@Model_Name", SqlDbType.NVarChar,50),
new SqlParameter("@Model_Desp", SqlDbType.NVarChar,500),
new SqlParameter("@Model_IsSys", SqlDbType.Bit)
};
parameters[0].Value = new Guid("F3CD1369-58C0-4A1F-AF88-05FCF734E079");
parameters[1].Value = "测试实体模型";
parameters[2].Value = "实体模型描述";
parameters[3].Value = false;

string connStr = @"Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=officially;Data Source=LCSNB"SQL2K";
string cmdStr = "insert into LCS_Sys_Model ([Model_GUID],[Model_Name],[Model_Desp],[Model_IsSys]) values ( @Model_GUID,@Model_Name,@Model_Desp,@Model_IsSys)";

System.Data.SqlClient.SqlConnection conn = new System.Data.SqlClient.SqlConnection(connStr);
System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand(cmdStr);

cmd.Connection = conn;
foreach (var item in parameters)
{
cmd.Parameters.Add(item);
}

当前1/2页 12下一页阅读全文

(0)

相关推荐

  • 带参数的sql和不带参数的sql存储过程区别第1/2页

    带参数的sql语句,在数据库端,执行的是 exec sp_executesql eg: exec sp_executesql N'insert into LCS_Sys_Model ([Model_GUID],[Model_Name],[Model_Desp],[Model_IsSys]) values ( @Model_GUID,@Model_Name,@Model_Desp,@Model_IsSys)', N'@Model_GUID uniqueidentifier,@Model_Name

  • 基于命令行执行带参数的php脚本并取得参数的方法

    本文分析了基于命令行执行带参数的php脚本并取得参数的方法.分享给大家供大家参考,具体如下: 一.为什么我们要在命令行下运行php脚本呢? 个人理解,主要有二个原因: 1. 利用crontab去跑php,可以给服务器减压,当然在这里有一个条件,就是实时性要求不高.比如:sns中的好友动态,这个实时要求不高,但是数据量比较大,这个时候定时跑的话,会给web服务器,数据库服务器分担不小的压力. 2. 就是我们要定时去完成某一事情,比如:我要删除一个月前,用户留言,这个时候,写的php脚本在cront

  • Python MySQLdb 执行sql语句时的参数传递方式

    使用MySQLdb连接数据库执行sql语句时,有以下几种传递参数的方法. 1.不传递参数 conn = MySQLdb.connect(user="root",passwd="123456",host="192.168.101.23",db="cmdb") orange_id = 98 sql = "select * from orange where id=%s" % orange_id cursor =

  • ADO.NET防SQL注入与使用参数增删改查

    一.sql注入风险及解决方案 SQL注入是指在事先定义好的SQL语句中注入额外的SQL语句,从此来欺骗数据库服务器的行为. 示例:制作会员登录功能. 登录按钮代码如下: private void btLogin_Click(object sender, EventArgs e) { //1-定义连接字符串 string connStr = "server=.;database=DBTEST;uid=sa;pwd=123456"; //2-定义连接对象,打开连接 SqlConnectio

  • 浅谈带缓冲I/O 和不带缓冲I/O的区别与联系

    这里搜集从网上看到的一些言论,自认为还是比较靠谱的,有些不靠谱的根据自己的理解进行了修正. 首先要明白不带缓冲的概念:所谓不带缓冲,并不是指内核不提供缓冲,而是只单纯的系统调用,不是函数库的调用.系统内核对磁盘的读写都会提供一个块缓冲(在有些地方也被称为内核高速缓存),当用write函数对其写数据时,直接调用系统调用,将数据写入到块缓冲进行排队,当块缓冲达到一定的量时,才会把数据写入磁盘.因此所谓的不带缓冲的I/O是指进程不提供缓冲功能(但内核还是提供缓冲的).每调用一次write或read函数

  • DataTables添加额外的查询参数和删除columns等无用参数实例

    废话不多说,直接上代码 //1.定义全局变量 var iStart = 0, searchParams={}; //2.配置datatable的ajax配置项 "ajax": { "url": "/user/query", "type": "POST", //动态请求参数设置,会应用到每次请求 "data": function (d) { //删除多余请求参数 for(var key i

  • Python函数参数匹配模型通用规则keyword-only参数详解

    Python3对函数参数的排序规则更加通用化了,即Python3 keyword-only参数,该参数即为必须只按照关键字传递而不会有一个位置参数来填充的参数.该规则在处理人一多个参数是很有用的. keyword-only kword_only(1, 2, 3, c=4) print('-' * 20) kword_only(a=1, c=3) 示例结果: 1 (2, 3) 4 -------------------- 1 () 3 在 *args 之后的参数都需要在调用中使用关键字的方式传递,

  • 详解汇编语言RCL(带进位循环左移)和RCR(带进位循环右移)指令

    汇编语言是依赖于计算机的低级的程序设计语言. RCL(带进位循环左移)指令把每一位都向左移,进位标志位复制到 LSB,而 MSB 复制到进位标志位: 如果把进位标志位当作操作数最高位的附加位,那么 RCL 就成了循环左移操作.下面的例子中,CLC 指令清除进位标志位.第一条 RCL 指令将 BL 最高位移入进位标志位,其他位都向左移一位.第二条 RCL 指令将进位标志位移入最低位,其他位都向左移一位: clc                             ; CF = 0 mov bl

  • SQL Server利用bcp命令把SQL语句结果生成文本文件

    在SQL Server里可以调用DOS下的命令行工具bcp来实现把表里的数据或者SQL语句结果生成文本文件. BCP命令的参数格式: 复制代码 代码如下: BCP {dbtable | query} {in | out | queryout | format} datafile [-m maxerrors] [-f formatfile] [-e errfile] [-F firstrow] [-L lastrow] [-b batchsize] [-n native type] [-c cha

  • SQL SERVER 中构建执行动态SQL语句的方法

    1 :普通SQL语句可以用exec执行 Select * from tableName exec('select * from tableName') exec sp_executesql N'select * from tableName' -- 请注意字符串前一定要加N 2:字段名,表名,数据库名之类作为变量时,必须用动态SQL declare @fname varchar(20) set @fname = 'FiledName' --Select @fname from tableName

随机推荐