最近做的一个项目,发现里面有这样的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表,能不能是用这样的方法?

解决方案 »

  1.   

    没啥危险 ,不过可以这样写 :
    string kkk="select * from departement where id=(select top 1 id  from users)"
    int ss=mydb.ExecuteNonQuery(kkk);
      

  2.   

    怕危险就用try catch结构,让系统自动抛错。这种只是查询的语句,问题不大。
    PS:当然有公司要求不能在UI端出现SQL代码等等,各家习惯、规则、要求不同。