簡體   English   中英

如何避免T-SQL錯誤:從類型DBNull到類型String的轉換無效

[英]How to avoid T-SQL error: conversion from type DBNull to type String is not valid

我使用以下T-SQL將數據插入到由C#構建的應用程序中,有些記錄可以正常工作,但有些記錄會在下面給出錯誤。

在此處輸入圖片說明

INSERT INTO [MITESTCO].[dbo].[MIQSUP] ([itemId], [suplProdCode], [suplId])  
    SELECT
        [itemId], [suplId], [suplProdCode]  
    FROM 
        [table 28]   
    WHERE  
        [itemId] NOT IN (SELECT [itemId] FROM [MIQSUP]);

有關調用即時(JIT)調試而不是此對話框的詳細信息,請參見此消息的末尾。

**************異常文本************** System.InvalidCastException:從類型'DBNull'到類型'String'的轉換無效。 在Microsoft.VisualBasic.CompilerServices.Conversions.ToString(對象值)在MISys.Client.MIUltraDataGrid.MIUltraDataGrid.MIUltraDataGrid_InitializeRow(對象發送者,InitializeRowEventArgs e)在Infragistics.Win.UltraWinGrid.InitializeRowEventHandler。 Infragistics.Win.UltraWinGrid.UltraGrid.OnInitializeRow(InitializeRowEventArgs e)Infragistics.Win.UltraWinGrid.UltraGrid.FireInitializeRow(Infragistics.Win.UltraWinGrid.UltraGrid.FireInitializeRow(InitializeRow)(InitializeRow(InitializeRowEventArgs e) Infragistics.Win.UltraWinGrid.RowsCollection.FireInitializeRow(IList行)處的Infragistics.Win.UltraWinGrid.RowsCollection.InitNonGroupByRows(IList fireInitializeRowOnTheseRows)處的UltraGridRow.FireInitializeRow()Infragistics.Win。位於Infragistics.Win.UltraWinGrid.RowsCollection.EnsureNo的Win.UltraWinGrid.RowsCollection.SyncRows() tDirty()是Infragistics.Win.UltraWinGrid.RowsCollection.GetEnumerator()是MISys.Client.MIUltraDataGrid.MIUltraDataGrid.RefreshGrid()是MISysForms.MIDetailsTemplate.RefreshGrids(Control myparent)是MISysForms.MIDetailsTemplate.RefreshGrids(Control MISysForms.MIDetailsTemplate.Tools.Manager.ObjectDetailsTemplate ,網址為Infragistics.Win.UltraWinToolbars.UltraToolbarsManager.OnToolClick(ToolClickEventArgs e),網址為...。

詢問您的數據行,例如,該值是否不為空,則可以將其強制轉換為:

object Value = dataRow[columnName];
if (Value != DBNull.Value)

您可以使用上面的答案,或者,如果您無權訪問代碼,請更改您的SELECT以插入空白而不是null(假設您有SQL Server)

INSERT INTO [MITESTCO].[dbo].[MIQSUP] ([itemId], [suplProdCode], [suplId])  
SELECT
    IsNull([itemId],''), IsNUll([suplId], ''), ISNull([suplProdCode],'')  
FROM 
    [table 28]   
WHERE  
    [itemId] NOT IN (SELECT [itemId] FROM [MIQSUP]);

您的其中一列正在返回NULL值,並且如堆棧跟蹤中所示,調用ToString()函數會引發該錯誤。 您可以使用TSQL ISNULL函數重寫SELECT語句。

INSERT INTO [MITESTCO].[dbo].[MIQSUP] ([itemId], [suplProdCode], [suplId])  
SELECT
    [itemId], [suplId], ISNULL([suplProdCode],'') as suplProdCode
FROM 
    [table 28]   
WHERE  
    [itemId] NOT IN (SELECT [itemId] FROM [MIQSUP]);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM