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

标签 c# sql-server error-handling

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

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

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

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

  • 请求DBA为我们创建专门的消息/日志表
    然后在我们的脚本中写入该表
    然后在我们的代码中,读取该表
  • 将我们的代码/脚本分成多个步骤,并从.Net代码中调用它(然后我们将不得不使用事务吗?)
  • 等等等?真的在这里撞我的头...

  • 谢谢大家。

    最佳答案

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

    您可以做的以改善您的情况是在很大程度上利用Ado.net。专门使用DataTables。您可以加载架构,它将以Sql Table的形式创建DataTable。检查DataTable Column对象http://msdn.microsoft.com/en-us/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编写自己的数据验证逻辑。

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

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

    关于c# - SQL Server ADO.Net从SQL脚本检索错误信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19986295/

    相关文章:

    c# - 使用 ClientWebSocket 与 Websocket 服务器进行安全(SSL)连接

    sql-server - 从 SparklyR 将表加载到 SQL Server

    SQL Server NOT EXISTS 效率

    android - 如何防止EditText错误图标被填充插入?

    c# - Web API 'Request' 为空

    c# - OPC UA 证书链验证不完整 - OPC Foundation SDK

    Python:通过具有多个 Excepts 的 Try/Except block 传播异常

    php - 如何捕获PHP中的错误

    c# - 在 C# 中,如何解析主机的 IP 地址?

    sql-server - SQL 服务器和 XBRL