[英]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.