C# 如何测试任何数据类型的DBNull?
我已经在网上浏览了几天,似乎找不到一条通向错误的道路。在我的代码中,有一个方法调用我的Get_数据来执行简单的选择并填充wpf数据网格。现在我面临的问题是,当执行该方法时,它会为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,
[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;