1

我在包装此 SQL 的 TableAdapter 中有一个查询(Oracle SQL,使用':'而不是'@'作为参数化变量),我称之为GetModel()

SELECT MFG_PRODUCT FROM FRAME_NO
WHERE FRM_NO = :FRM_NO

我预计查询可能会返回空值,因此我将列MFG_PRODUCT空值设置为 Microsoft http://msdn.microsoft.com/en-us/library/ya91ataz(v=vs.100)Null的本指南所指出的 。 aspx

但是,当查询没有返回任何行时,我的应用程序仍然会抛出异常。我该怎么办?

我已经重建了整个解决方案,以防代码仍然引用旧的编译数据集,但仍然没有运气。

编辑:这是代码。返回值为null时抛出异常

try
{
    String modelCode = frameAdapter.GetModelCode(txtStdFrameId.Text.Trim()).ToString();
    if(String.IsNullOrEmpty(modelCode)) //Go directly to exception when data is null here
    {
       //Process the data 
    }
}
catch(Exception ex)
{
     //Log error to a text file
}
4

2 回答 2

1

以这种方式设置列NULL与您的空数据行没有任何关系。仅当您至少有一行并且该行中的列是NULL

对于不返回行的数据,您必须自己处理这种情况

//DataTable
DataTable dt = ds.Fill(..);

//handle no rows 
if(dt.Rows.Count == 0)
{
   //what do you want to do here
}
else
{
   //this dt contains at least one row, now I can use it without any errors/exception
}
于 2012-09-06T04:28:14.817 回答
0

好的,我找到了解决方案。这是因为这一行中的拼写错误: String modelCode = frameAdapter.GetModelCode(txtStdFrameId.Text.Trim()).ToString();

显然将 a 转换为null触发错误的字符串。它应该是这样的: String modelCode = frameAdapter.GetModelCode(txtStdFrameId.Text.Trim());

于 2012-09-06T06:12:48.500 回答