DDR爱好者之家 Design By 杰米
带参数的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);
}
12下一页阅读全文
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);
}
12下一页阅读全文
DDR爱好者之家 Design By 杰米
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
DDR爱好者之家 Design By 杰米
暂无评论...
更新日志
2024年03月29日
2024年03月29日
- 苏有朋.1994-珍惜的背包(第3张)【飞碟】【WAV+CUE】
- 《宝可梦:朱紫》“蓝之圆盘”IGN7分:性能优化仍旧灾难
- 《塞尔达传说:王国之泪》大获成功!多项年度数据表现优秀
- 应景!欧任用《塞尔达传说:王国之泪》堆雪人
- 杨采妮.1996-为所欲为(国专)【EMI百代】【WAV+CUE】
- 黎姿.1993-如果真的恋爱【华纳】【WAV+CUE】
- 朱婧汐.2024-VILLAIN反派角色【StreetVoic】【FLAC分轨】
- 《喷射战士3》最新祭典公布 1月13日举办
- NS日服年度下载榜公开:《王泪》不敌《西瓜游戏》
- 科乐美《心跳回忆GS》系列推出复刻版 2月14日登陆NS
- 林峰.2012-SELF-PORTRAIT【英皇娱乐】【WAV+CUE】
- TENSION.2004-Story新歌+精丫EMI百代】【FLAC分轨】
- 草蜢.2000-环球2000超巨星系列【环球】【WAV+CUE】
- 国行Switch开启元旦折扣!《马里奥奥德赛》7折促销
- 《塞尔达》官方账号感谢玩家支持 发布王泪最新壁纸