我在一个TableAdapter中有一个查询,它包装了这个SQL (Oracle SQL,使用':‘代替'@’作为参数化变量),我称之为GetModel()
SELECT MFG_PRODUCT FROM FRAME_NO
WHERE FRM_NO = :FRM_NO我预料到查询可能返回null值,因此我将列MFG_PRODUCT的null值设置为Null,正如微软http://msdn.microsoft.com/en-us/library/ya91ataz(v=vs.100).aspx中的指导原则所指出的那样
但是,当查询没有返回任何行时,我的应用程序仍然会抛出异常。我该怎么办?
我已经重新构建了整个解决方案,以防代码仍然引用旧的已编译数据集,但仍然没有运气。
编辑:这是代码。当返回值为空时,将引发异常
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
}发布于 2012-09-06 12:28:15
以这种方式将列设置为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-06 14:12:49
好了,我找到解决方案了。这是因为该行中的拼写错误:String modelCode = frameAdapter.GetModelCode(txtStdFrameId.Text.Trim()).ToString();
显然,将null转换为触发错误的字符串。应该是这样的:String modelCode = frameAdapter.GetModelCode(txtStdFrameId.Text.Trim());
https://stackoverflow.com/questions/12292848
复制相似问题