C# 如何测试任何数据类型的DBNull?

C# 如何测试任何数据类型的DBNull?,c#,wpf,C#,Wpf,我已经在网上浏览了几天,似乎找不到一条通向错误的道路。在我的代码中,有一个方法调用我的Get_数据来执行简单的选择并填充wpf数据网格。现在我面临的问题是,当执行该方法时,它会为DBNull抛出一个错误。该表允许某些列具有空值 表: [WorkId] INT IDENTITY (100, 1) NOT NULL, [fk_CustId] INT NULL, [CustPartNum] NVARCHAR (25) NULL,

我已经在网上浏览了几天,似乎找不到一条通向错误的道路。在我的代码中,有一个方法调用我的Get_数据来执行简单的选择并填充wpf数据网格。现在我面临的问题是,当执行该方法时,它会为DBNull抛出一个错误。该表允许某些列具有空值

表:

[WorkId]         INT           IDENTITY (100, 1) NOT NULL,
[fk_CustId]      INT           NULL,
[CustPartNum]    NVARCHAR (25) NULL,
[QtyPieces]      INT           NOT NULL,
[WoDateCreated]  DATETIME      DEFAULT (getdate()) NULL,
[WoDeliverDate]  DATETIME      NOT NULL,
[WoCompleted]    BIT           NULL,
[WoCompleteDate] DATETIME      NULL,
PRIMARY KEY CLUSTERED ([WorkId] ASC),
FOREIGN KEY ([fk_CustId]) REFERENCES [dbo].[Customers] ([CustId])
clsDB:

public static SqlConnection DB_Connect()
    {
        // Created connection to local DB
        string cn_String = Properties.Settings.Default.ShopSystemConnectionString;
        SqlConnection cn_Connect = new SqlConnection(cn_String);
        if (cn_Connect.State != ConnectionState.Open) cn_Connect.Open();

        return cn_Connect;
    }

public static DataTable Get_Data(string SQL_Text)
    {
        SqlConnection cn_Connect = DB_Connect();

        DataTable table = new DataTable();
        SqlDataAdapter adapter = new SqlDataAdapter(SQL_Text, cn_Connect);

        adapter.Fill(table);
        if (table.Rows.Count == 0)
        {
            MessageBox.Show("No record available for the selected line");
        }

        return table;
    }
错误:

非常感谢您的任何帮助或建议

编辑1

XAML代码

<DataGrid x:Name="gridCustWO" Height="190" Canvas.Left="293" Width="734" FontSize="11" BorderThickness="1" Background="#FF725D55" IsReadOnly="True" AutoGenerateColumns="False" ItemsSource="{Binding WorkOrders}">
        <DataGrid.Columns>
            <DataGridTextColumn Binding="{Binding WorkId}" Width="Auto" Header="ID"/>
            <DataGridTextColumn Binding="{Binding CustPartNum}" Width="Auto" Header="Part Number"/>
            <DataGridTextColumn Binding="{Binding QtyPieces}" Width="Auto" Header="Qty Total"/>
            <DataGridTextColumn Binding="{Binding WoDateCreated}" Width="Auto" Header="Order Created"/>
            <DataGridTextColumn Binding="{Binding WoDeliverDate}" Width="Auto" Header="Shipped"/>
            <DataGridTextColumn Binding="{Binding WoCompleteDate}" Width="Auto" Header="WO Completed"/>
        </DataGrid.Columns>
    </DataGrid>

无法100%确定这是否可行,但我的假设是,通过使用DataGridTextColumns并绑定数据,它会尝试将其转换为字符串,一种方法是将datagrid更改为:

<DataGrid x:Name="gridCustWO" Height="190" Canvas.Left="293" Width="734" FontSize="11" BorderThickness="1" Background="#FF725D55" IsReadOnly="True" AutoGenerateColumns="True" />

希望这有帮助

您能为您的数据网格显示XAML吗?@Kei Code addedw您为什么不使用orm?使用可为null的属性并让它为您强制转换。短小精悍可能是最接近ADO金属的。
gridCustWO.ItemsSource = myDataTable.DefaultView;
// if you want to hide a column
gridCustWO.Columns[0].Visibility = Visibility.Hidden;