我使用以下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(对象 sender,InitializeRowEventArgs e)at Infragistics.Win.UltraWinGrid.InitializeRowEventHandler.Invoke(对象 sender,InitializeRowEventArgs e)at Infragistics.Win.UltraWinGrid.UltraGrid.OnInitializeRow(InitializeRowEventArgs 吃 Infragistics.Win.UltraWinGrid.UltraGrid.FireEvent(GridEventIds id, EventArgs e)at Infragistics.Win.UltraWinGrid.UltraGrid.FireInitializeRow(InitializeRowEventArgs 吃 Infragistics.Win.UltraWinGrid.UltraGridRow.FireInitializeRow()at Infragistics.Win.UltraWinGrid.RowsCollection.FireInitializeRow(IList的 行) Infragistics.Win.UltraWinGrid.RowsCollection.InitNonGroupByRows(IList的 fireInitializeRowOnTheseRows)at Infragistics.Win.UltraWinGrid.RowsCollection.SyncRowsHelper(IList的 boundList)at Infragistics.Win.UltraWinGrid.RowsCollection.SyncRows()at Infragistics.Win.UltraWinGrid.RowsCollection.EnsureNotDirty()at at Infragistics.Win.UltraWinGrid.RowsCollection.GetEnumerator()at MISys.Client.MIUltraDataGrid.MIUltraDataGrid.RefreshGrid()at MISysForms.MIDetailsTemplate.RefreshGrids(控制myparent)at MISysForms.MIDetailsTemplate.RefreshGrids(控制myparent)at MISysForms.MIDetailsTemplate.RefreshGrids(控制myparent)at MISysForms.MIDetailsTemplate.RefreshGrids(控制myparent)at MISysForms.MIDetailsTemplate.RecordChanged()at MISysForms.MIItemDetails.RecordChanged()at MISysForms.MIDetailsTemplate.GetPreviousRecord()at MISysForms.MIDetailsTemplate.UltraToolbarsManager1_ToolClick(对象 发件人,ToolClickEventArgs e)at Infragistics.Win.UltraWinToolbars.UltraToolbarsManager.OnToolClick(ToolClickEventArgs 吃 ....
答案 0 :(得分:2)
询问你的数据行,例如,如果值不是空,那么你可以把它强制转换:
object Value = dataRow[columnName];
if (Value != DBNull.Value)
答案 1 :(得分:0)
您可以使用上述答案,或者如果您无法访问代码,请将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]);
答案 2 :(得分:0)
您的一个列返回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]);