繁体   English   中英

SQL Server ADO.Net从SQL脚本检索错误信息

[英]SQL Server ADO.Net retrieve error information from sql script

我正在做一个项目,在该项目中,我们必须查询旧的SQL Server 2000数据库(PeopleSoft,如果您必须知道的话)。 查询返回结果集。 如果我们使用的是较新的数据库,我将使用存储过程和错误处理(例如@ ErrNo,@ ErrMsg,Try / Catch)来获取所需的信息。

但是,由于我们使用的是SQL Server 2000,因此不允许使用存储过程,因此只能使用动态SQL查询和脚本。 我们当前正在使用ADO.Net(例如DbCommand和Execute方法)来获取结果集。

我想做的是在我们的sql脚本中添加更多的错误处理/验证,并将消息返回到我们的.Net代码。 (例如,输入值无效,找不到行等)

有谁知道如何在这些约束下做到这一点? 如果没有简便的方法,您可以推荐一些替代方法吗? 例如

  1. 要求DBA为我们以及在脚本中创建专门的消息/日志记录表,写入该表和代码,然后读取该表

  2. 将我们的代码/脚本分解成多个步骤,然后从.Net代码中调用它(然后我们将不得不使用事务吗?)

  3. 等等等? 真是在敲我的头...

感谢大家。

存储过程与您试图实现的目标无关(我认为)。 即使存储过程中有错误处理,您仍将发送无效数据以获取错误处理。 似乎,您需要的是更好的“数据库调用之前”验证。

您可以做的以改善您的状况是在很大程度上利用Ado.net。 专门使用DataTables 您可以加载架构,它将以Sql Table的形式创建DataTable 检查DataTable Column对象的属性http://msdn.microsoft.com/zh-cn/library/system.data.datacolumn_properties%28v=vs.90%29.aspx

如果您尝试首先将无效数据插入该表中,它将出错,并且您将能够创建特定的错误处理。

另外,您可以(并且应该)用参数化查询替换动态sql。 这是推荐的方法,可以提高性能。

代替 :

"select * from customer where id = " + custId.ToString()

你应该做:

"select * from customer where id = @1"

然后,当您创建命令对象时,将添加一个参数。 这对于Sql Server性能是有好处的。

对于您来说, DataTable将是防止向服务器发送错误代码的防线。

另一种方法是完全根据INFORMATION_SCHEMA编写自己的数据验证逻辑。

另一种方法是进行严格的数据输入验证。

通常,系统同时具有输入验证和数据层验证。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM