使用了SqlParameter执行,如果得出赋值的SQL语句,而不是@XXX这种

不懂必须要问 2013-02-11 03:53:47
public static object GetSingle(string SQLString, params SqlParameter[] cmdParms)
{
using (SqlConnection connection = new SqlConnection(connectionString))
{
using (SqlCommand cmd = new SqlCommand())
{
try
{
PrepareCommand(cmd, connection, null, SQLString, cmdParms);
object obj = cmd.ExecuteScalar();
cmd.Parameters.Clear();
if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value)))
{
return null;
}
else
{
return obj;
}
}
catch (System.Data.SqlClient.SqlException e)
{
throw e;
}
}
}
}

比如我执行了 INSERT INTO a(name) values(@name)

系统会不会帮我生成INSERT INTO a(name) values('name'),我想将这句保存下来。
...全文
386 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
threenewbee 2013-02-23
  • 打赏
  • 举报
回复
那你直接用string.Format去组合好了。
不懂必须要问 2013-02-23
  • 打赏
  • 举报
回复
引用 12 楼 winner2050 的回复:
你这么做,有重大性能问题,还有重大bug隐患。 你以为从以前保存的sql代码里面找到你需要的,那么简单啊? 查找算法你肯定不会写,而是用循环比较。 你怎么知道某语句经常会被反复使用?命中率,你考虑吗?大量冷门或者不重复的代码你能写算法区分出来嘛? SQL code?12345select * from A where B=@Bselect * ……
问题是我不需要他这些参数。 select * from A where B=@B , 有没有直接办法得到select * from A where B='234234234234'。没有就是没有,有就是有。
winner2050 2013-02-14
  • 打赏
  • 举报
回复
你这么做,有重大性能问题,还有重大bug隐患。 你以为从以前保存的sql代码里面找到你需要的,那么简单啊? 查找算法你肯定不会写,而是用循环比较。 你怎么知道某语句经常会被反复使用?命中率,你考虑吗?大量冷门或者不重复的代码你能写算法区分出来嘛?

select * from A where  B=@B
select * from A where  B = @B
select * from A where   B=@B
select * from A 
where  B=@B
你怎么编写代码查找出这几个是相同的sql语句呢?你有这本事吗? 微软已经实现这个查找了。 sql 里面的参数化就是区别相同代码的,重复使用查询计划用的。 数据库基本的功能,你要重复现实?
红衣老大 2013-02-13
  • 打赏
  • 举报
回复
可以的啊 SqlCommand 某个属性 可以看到 完整的语句 就是 @被真实内容替换过的
不懂必须要问 2013-02-12
  • 打赏
  • 举报
回复
不管它是否所谓什么参数。支持百万所谓参数也好。只要他参数的值。 SET A=@A 我要他SET A='XXXX' 我要得到这个结果。
不懂必须要问 2013-02-12
  • 打赏
  • 举报
回复
引用 8 楼 sp1234 的回复:
引用 6 楼 MoreQuestion 的回复:还是喜欢用ADO.NET原始方式 ADO.NET本身就是支持参数形式。只不过你自己硬要说人家ADO.NET是给你替换字符串,这不就悲剧么!
那什么术语俺不懂,那我只要在执行前得到所谓参数的值。不要只显示参数。
  • 打赏
  • 举报
回复
“保存下来”是什么意思? SQL Server会自动保存编译结果,下一次有类似的sql语句就会重复使用编译结果而不会重新编译。 但是你要什么“保存”呢?
  • 打赏
  • 举报
回复
你还是用linq吧
  • 打赏
  • 举报
回复
引用 6 楼 MoreQuestion 的回复:
还是喜欢用ADO.NET原始方式
ADO.NET本身就是支持参数形式。只不过你自己硬要说人家ADO.NET是给你替换字符串,这不就悲剧么!
  • 打赏
  • 举报
回复
引用 4 楼 MoreQuestion 的回复:
啊,就是在C#中执行前保存起来。保存为明文结果,而不是@变量这种……
什么叫做“明文结果”,这是你自己发明的。 谁跟你说过SQL Server或者ADO.NET是替换字符串?这也是你自己想象出来的。 如果想得到字符串,那么你自己就拼字符串得了。不要想象过度。
不懂必须要问 2013-02-11
  • 打赏
  • 举报
回复
引用 1 楼 hjywyj 的回复:
你还是用linq吧
还是喜欢用ADO.NET原始方式
不懂必须要问 2013-02-11
  • 打赏
  • 举报
回复
引用 3 楼 dalmeeme 的回复:
参数化SQL中的参数由SQL数据库负责“替换值”,所以C#这里取不到INSERT INTO a(name) values('name')。
悲剧了……
不懂必须要问 2013-02-11
  • 打赏
  • 举报
回复
引用 2 楼 sp1234 的回复:
“保存下来”是什么意思? SQL Server会自动保存编译结果,下一次有类似的sql语句就会重复使用编译结果而不会重新编译。 但是你要什么“保存”呢?
啊,就是在C#中执行前保存起来。保存为明文结果,而不是@变量这种……
dalmeeme 2013-02-11
  • 打赏
  • 举报
回复
参数化SQL中的参数由SQL数据库负责“替换值”,所以C#这里取不到INSERT INTO a(name) values('name')。

62,266

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧