C# 处理TableAdapter空值
我在一个TableAdapter中有一个查询,它包装了这个SQL(Oracle SQL,对参数化变量使用“:”而不是“@”),我称之为C# 处理TableAdapter空值,c#,.net,dataset,C#,.net,Dataset,我在一个TableAdapter中有一个查询,它包装了这个SQL(Oracle SQL,对参数化变量使用“:”而不是“@”),我称之为GetModel() 我预计查询可能会返回空值,因此我将列MFG_PRODUCTnull值设置为null,正如Microsoft的此指南所指出的那样 然而,当查询没有返回任何行时,我的应用程序仍然抛出异常。我该怎么办 我重新构建了整个解决方案,以防代码仍然引用旧的已编译数据集,但仍然不走运 编辑:这是代码。当返回值为null时引发异常 try { Str
GetModel()
我预计查询可能会返回空值,因此我将列MFG_PRODUCT
null值设置为null
,正如Microsoft的此指南所指出的那样
然而,当查询没有返回任何行时,我的应用程序仍然抛出异常。我该怎么办
我重新构建了整个解决方案,以防代码仍然引用旧的已编译数据集,但仍然不走运
编辑:这是代码。当返回值为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
}
以这种方式将列设置为
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
}
以这种方式将列设置为
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
}
好的,我找到了解决办法。这是因为这一行的打字错误:
String modelCode=frameAdapter.GetModelCode(txtStdFrameId.Text.Trim()).ToString()代码>
显然,将null
转换为触发错误的字符串。
应该是这样的:
String modelCode=frameAdapter.GetModelCode(txtStdFrameId.Text.Trim())代码>好的,我找到了解决方案。这是因为这一行的打字错误:
String modelCode=frameAdapter.GetModelCode(txtStdFrameId.Text.Trim()).ToString()代码>
显然,将null
转换为触发错误的字符串。
应该是这样的:
String modelCode=frameAdapter.GetModelCode(txtStdFrameId.Text.Trim())代码>引发了哪些异常?异常中包含哪些详细信息?如何处理返回的行?是否仅当数据没有行时才会发生这种情况是的,仅当返回的数据没有行时才会发生这种情况。异常是System.NullReferenceException:Object reference未设置为对象的实例。
如果(String.IsNullOrEmpty(modelCode))
无法引发异常,则该行无法引发异常。请在代码中放置断点以了解引发异常的确切位置-它可能是frameAdapter.GetModelCode()
引发了哪些异常?异常中包含哪些详细信息?如何处理返回的行?是否仅当数据没有行时才会发生这种情况是的,仅当返回的数据没有行时才会发生这种情况。异常是System.NullReferenceException:Object reference未设置为对象的实例。
如果(String.IsNullOrEmpty(modelCode))
无法引发异常,则该行无法引发异常。请在代码中放置断点以了解引发异常的确切位置-它可能是frameAdapter.GetModelCode()
查询在dataset中设置为单值返回函数,因此它不会返回datatable对象,因为参数是主键。您仍然需要检查是否至少有一行。当您的数据库不返回任何内容时,就没有可访问的内容,您会得到一个Null异常。这是来自.Net
。如果NULL来自您的数据库,您将获得DBNull.value值,该值不会在C中引发异常#如果该解释不够,那么您需要发布代码当tableadapter返回值为String时,如何检查返回的行数?使用If(String.IsNullOrEmpty(returned_value))
。你为什么不发代码。这将使帮助变得更容易查询在dataset中设置为单值返回函数,因此它不会返回datatable对象,因为参数是主键。您仍然需要检查是否至少有一行。当您的数据库不返回任何内容时,就没有可访问的内容,您会得到一个Null异常。这是来自.Net
。如果NULL来自您的数据库,您将获得DBNull.value值,该值不会在C中引发异常#如果该解释不够,那么您需要发布代码当tableadapter返回值为String时,如何检查返回的行数?使用If(String.IsNullOrEmpty(returned_value))
。你为什么不发代码。这将使帮助更容易