我正在研究一个项目,在该项目中,我们必须查询旧的SQL Server 2000数据库(PeopleSoft,如果您必须知道的话)。查询返回结果集。如果我们使用的是较新的数据库,则可以使用存储过程和错误处理(例如@ ErrNo,@ ErrMsg,Try/Catch)来获取所需的信息。
但是,由于我们使用的是SQL Server 2000,因此不允许使用存储过程,因此只能使用动态SQL查询和脚本。我们目前正在使用ADO.Net(例如DbCommand和Execute方法)来获取结果集。
我想做的是在SQL脚本中添加更多错误处理/验证,并将消息返回到.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/