gpt4 book ai didi

asp.net - 捕获特定OleDB错误的首选方法

转载 作者:行者123 更新时间:2023-12-03 08:36:32 25 4
gpt4 key购买 nike

好的-我遇到的情况是必须针对数据库中可能存在的表或不在数据库中的表执行动态构建的存储过程。然后将检索到的数据分流到VB.Net支持的基于ASP的报告页面。根据设计,如果数据库中不存在这些表,则相关数据将自动隐藏在报告页面上。目前,我正在通过检查不可避免的错误并将div隐藏在catch块中来进行此操作。有点笨拙,但是有效。

我不能在后面加上VB代码,但是下面包含了相关的存储过程。

但是,这种方法的问题最近引起了我的注意,尽管没有适当的数据,但由于明显的原因,div被隐藏了。事实证明,试图在动态SQL调用中选择表的用户没有适当的选择权限,这是一个很容易的修复,一旦我可以对其进行跟踪。

因此,有两个问题。首先,最重要的是-是否有比通过捕获VB.Net代码背后的错误更好的方法来检查丢失的表?考虑所有因素后,我宁愿保存错误检查以查找实际错误。其次,除了仅检查实际的堆栈跟踪字符串之外,是否有一种首选方法可以将try-> catch块捕获的普通对象中的特定OLE DB错误从中释放出来?

SQL查询-代码的主要要点是,由于数据库的设计原因,我必须手动确定要定位的实际表的名称。数据库将作业记录在一个表中,但是每个作业也都有自己的表,用于处理该作业中处理的项目的数据,这些数据是我必须检索的那些表中的数据。不幸的是,我对此设置完全无能为力。

DECLARE   @sql                  NVarChar(Max),
@params NVarChar(Max),
@where NVarChar(Max)

-- Retained for live testing of stored procedure.
-- DECLARE @Table NvarChar(255) SET @Table = N'tblMSGExportMessage_10000'
-- DECLARE @AcctID Integer SET @AcctID = 10000
-- DECLARE @Type Integer SET @Type = 0 -- 0 = Errors only, 1 = All Messages
-- DECLARE @Count Integer

-- Sets our parameters for our two dynamic SQL calls.
SELECT @params = N'@MsgExportAccount INT, @cnt INT OUTPUT'

-- Sets our where clause dependent upon whether we want all results or just errors.
IF @Type = 0
BEGIN
SELECT @where =
N' AND ( mem.[MSGExportStatus_OPT_CD] IN ( 11100, 11102 ) ' +
N' OR mem.[IngestionStatus_OPT_CD] IN ( 11800, 11802, 11803 ) ' +
N' OR mem.[ShortcutStatus_OPT_CD] IN ( 11500, 11502 ) ) '
END
ELSE
BEGIN
SELECT @where = N' '
END

-- Retrieves a count of messages.
SELECT @sql =
N'SELECT @cnt = Count( * ) FROM dbo.' + QuoteName( @Table ) + N' AS mem ' +
N'WHERE mem.[MSGExportAccount_ID] = @MsgExportAccount ' + @where

EXEC sp_executesql @sql, @params, @AcctID, @cnt = @Count OUTPUT

最佳答案

为避免错误,您可以查询sysobjects表以查明该表是否存在。这是SQL(替换YourTableNameHere)。如果返回> 0,则该表存在。在运行此查询的服务器上创建一个存储过程。

select count(*)
from sysobjects a with(nolock)
where a.xtype = 'U'
and a.name = 'YourTableNameHere'

关于asp.net - 捕获特定OleDB错误的首选方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2001021/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com