【问题标题】:Handling TableAdapter Null Values处理 TableAdapter Null 值
【发布时间】:2012-09-06 14:22:04
【问题描述】:

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

SELECT MFG_PRODUCT FROM FRAME_NO
WHERE FRM_NO = :FRM_NO

我预计查询可能会返回空值,因此我将列 MFG_PRODUCT 空值设置为 Null,正如 Microsoft 的本指南所指出的那样 http://msdn.microsoft.com/en-us/library/ya91ataz(v=vs.100).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
}

【问题讨论】:

  • 抛出了什么异常?例外情况中包含哪些详细信息?
  • 如何处理返回的行?仅当数据没有行时才会发生这种情况
  • 是的,只有当返回的数据没有行时才会发生。例外是System.NullReferenceException: Object reference not set to an instance of an object.
  • 那行if(String.IsNullOrEmpty(modelCode)) 不能抛出异常。
  • 在你的代码中放置一个断点来知道异常到底是在哪里抛出的——它可能是你的frameAdapter.GetModelCode()

标签: c# .net dataset


【解决方案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
}

【讨论】:

  • 查询设置为数据集中的单值返回函数,因此它不返回数据表对象,因为参数是主键。
  • 您仍然需要检查是否至少有一行。当您的数据库不返回任何内容时,就没有任何东西可以访问,并且您会收到 Null 异常。这是来自.Net。如果 NULL 来自您的数据库,您将获得 DBNull.Value 的值,它不会在 C# 中引发异常
  • 如果这个解释还不够,那么你需要发布你的代码
  • tableadapter返回值为String时如何查看返回行数?
  • 使用if (String.IsNullOrEmpty(returned_value))。你为什么不发布你的代码。这样会更容易提供帮助
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2020-12-29
    • 2015-11-04
    • 1970-01-01
    • 2014-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    相关资源
    最近更新 更多