【发布时间】:2012-12-27 00:06:35
【问题描述】:
我有这段代码有时有效,有时无效。正在执行的查询不是我自己编写的,但我被告知我所要做的就是对数据库运行它以获得我需要的结果。这是我的代码:
try {
using (SqlDataReader dr = cmd.ExecuteReader()) {
while (dr.Read()) {
try {
list.Add(dr.GetString(3) + " " + dr.GetInt32(4).ToString() + " " + dr.GetString(5) + " " + dr.GetDecimal(8).ToString());
} catch (Exception e) {
list.Add("fail");
}
}
}
} catch (SqlException sqlException) {
Debug.WriteLine(sqlException.Message);
}
我有时收到的错误是我无法删除表,因为我没有权限或表不存在。其他时候查询执行没有任何问题,我可以检索我的结果并将其存储在一个列表中。
当我在 SQL Server 2008 中运行查询时,有时我确实会遇到错误,但结果仍然会显示,并且符合我的预期。所以我的问题是:无论何时感觉似乎都会出现错误,我如何才能获取这些结果?
这里有一小部分给我带来麻烦的查询:
IF EXISTS (SELECT * from tempdb..sysobjects where name like '#TABLE%')
DROP #TABLE
我正在运行的查询中有许多这样的 if 语句,并且无法预测哪一个会导致错误。所以我现在所做的是将 DROP #TABLE 包围在一个 try-catch 块中,这样至少我仍然可以在我的 silverlight 程序中检索结果。我会和我的上级联系,问他为什么查询会自发返回这些错误..
【问题讨论】:
-
您应该真正与您的 DBA 一起找出为什么有时会发生此错误。没有充分理由而忽略错误是个坏主意。
-
似乎是只读查询中的删除表错误?遵循 cdhowie 的建议并检查您的查询是否存在 sql 注入漏洞
-
这似乎是一个 sql 注入,顺便说一句,你为什么要删除该表,它是一个临时表
-
您正在搜索以“#TABLE”开头的表。换句话说,如果存在名为“#TABLE_test”的表,这将返回 true。但随后您尝试删除名为“#TABLE”的表。 “如果#TABLE_test 存在,则删除#TABLE”。您知道为什么有时会出错吗?
-
@Cyborgx37,这对我来说有点道理。令我困惑的是,查询有时如何完美运行而没有问题,有时会导致错误?换句话说:我理解你的评论,但怎么会有一个表 #TABLE 有时存在而有时不存在
标签: c# silverlight