今天遇到的问题是需要尽量简化ASP.NET中访问SQL Server的操作。直接用SQL语句肯定是不行了,因为这样并不便于后期的程序维护,也不符合编程的习惯(尽量把数据和控制分开),通常的在ASP.NET中调用存储过程的方法如下:
但是,如果每次使用存储过程都设置Parameters的话,就比直接使用SQL语句更加复杂了,所以我就想到了下面的方法:
区别在于CommandText修改为带@的格式了,但是我测试了很多次,结果都在ExecuteNonQuery的时候报错:“没有存储过程 xxxxx ”,我上网也查过资料,发现很多人出现了类似的情况,有的是因为没有选对数据库,将存储过程记录到了Master或者其他的数据中了,还有的是没有执行成功Create Procedure的,就是没有发现有人遇到我这样的情况,开始我怀疑真的没有把存储过程记录到数据库中,我就把存储过程后面的@username。。。去掉了,缺参数的情况下执行,结果报错“存储过程xxx缺少参数”,可以肯定的是,存储过程已经记录到了SQL Server上面,只是格式的问题了,我也怀疑是否可能是username是关键字?加了中括号,还是不行,因为username根本就不是SqlServer的关键字,能改的都改了,最后能改的只能是CommandType了,我想类型不会是Text吧?结果一试,类型改为Text后,居然存储过程执行通过了!让我感觉摸不到头脑,但是的确是通过了,后来我也改回过StoredProcedure,并把参数改为Parameters的方式进行定义,结果还是不能通过,提示的还是未定义存储过程。
问题已经解决了,但是不知道为什么该是这样。觉得很郁闷。如果有高手知道这其中的原因,希望能给小弟个回答。