日期:2014-05-17  浏览次数:20477 次

这样写sql语句有啥危险么?
最近做的一个项目,发现里面有这样的sql语句

string kkk=@"declare @k int ; 
select @k=id top 1 from users;
select * from departement where id=@k; "
int ss=mydb.ExecuteNonQuery(kkk);


大概就这个意思,他把存储过程直接写到了string字符串里面!

我能想到的问题,
如果程序在"select @k=id from users"地方出现错误了,肯定整个语句返回的数据是不正常的或者是崩溃的;

现在就想问一下,像这样的sql语句的写法合适么?有啥危险么?
另外类似的,可能有一些查询只是用一次,需要带变量才比较方便来写,但是又不想直接写成存储过程(否则这样的数据会很多了),这种情况如何来进行处理。

ps:比如:insert into a 然后用返回的id去更新b表,能不能是用这样的方法?
------最佳解决方案--------------------
怕危险就用try catch结构,让系统自动抛错。这种只是查询的语句,问题不大。
PS:当然有公司要求不能在UI端出现SQL代码等等,各家习惯、规则、要求不同。
------其他解决方案--------------------
没什么大问题,不想封装到存储过程里面,也是可以的。
------其他解决方案--------------------
你要是怕危险就加个事务来控制,出问题就回滚
------其他解决方案--------------------
没啥危险 ,不过可以这样写 :
string kkk="select * from departement where id=(select top 1 id  from users)"
int ss=mydb.ExecuteNonQuery(kkk);
------其他解决方案--------------------
引用:
没啥危险 ,不过可以这样写 :
string kkk="select * from departement where id=(select top 1 id  from users)"
int ss=mydb.ExecuteNonQuery(kkk);

我倒是还真不想这样写,因为还有一些更加复杂的工作需要做!
------其他解决方案--------------------
感谢各位的解答,我再测试一下,不过看他们用了很久了,估计应该没有啥问题!