【发布时间】:2011-12-09 08:27:24
【问题描述】:
我相信这个问题是几个月前被问到的,但我相信我的情况不同,相同的规则可能不适用。
每次我执行此方法时都会弹出相同的错误。位置 0 没有行。如果我将 [0] 更改为 [1] 或 [15]; [1] 等处没有行。这是否意味着我的数据库甚至没有连接?我是否应该编写某种 if 语句来确定检查行是否存在?
public bool UpdateOrderToShipped(string order)
{
orderNumber = order;
string batch = ConfigurationManager.AppSettings["SuccessfulOrderBatch"];
string statement = "UPDATE SOP10100 SET BACHNUMB = '"+ batch +"' WHERE SOPNUMBE = @SOPNUMBE";
SqlCommand comm = new SqlCommand(statement, connectionPCI);
comm.Parameters.Add("SOPNUMBE", orderNumber);
try
{
comm.Connection.Open();
comm.ExecuteNonQuery();
comm.Connection.Close();
}
catch(Exception e)
{
comm.Connection.Close();
KaplanFTP.errorMsg = "Database error: " + e.Message;
}
statement = "SELECT SOPTYPE FROM SOP10100 WHERE SOPNUMBE = @SOPNUMBE";
comm.CommandText = statement;
SqlDataAdapter da = new SqlDataAdapter(comm);
DataTable dt = new DataTable();
da.Fill(dt);
soptype = dt.Rows[0]["SOPTYPE"].ToString(); //errror here
return true;
}
【问题讨论】:
-
为什么你的方法是布尔值?它只返回 true
-
@Andre:一个明显的原因是将来 catch 将返回一个 false,以便调用者知道它是否成功。
-
@Chris,这在某些方法中是可以的,您希望在这些方法中发生错误。事实并非如此。
-
我确定这是一个非常简单的问题,但是我收到 Length 属性错误,CS1061: 'System.Data.DataRowCollection' 不包含 'length' 的定义并且没有扩展方法可以找到接受“System.Data.DataRowCollection”类型的第一个参数的“长度”(您是否缺少 using 指令或程序集引用?)我确定我可以找到答案,但以防万一有人愿意提供帮助。
-
@Chris 当然,这就是我问的原因。我可能是错的,OP 可能想出了一个很好的理由在这种方法中返回一个布尔值,我会从中学习。或者我可能是对的,他可能甚至没有意识到这是一个糟糕的设计,他会从中吸取教训。这就是我们在 Stack Overflow 的原因,对吧? :)
标签: c# asp.net sql sql-server if-statement