C# 如何避免T-SQL错误:从DBNull类型到String类型的转换无效
我使用下面的T-SQL将数据插入到由C构建的应用程序中,有些记录工作正常,但有些记录给出了以下错误 有关调用即时消息的详细信息,请参见此消息的结尾 JIT调试,而不是此对话框 **************异常文本*************System.InvalidCastException:从类型“DBNull”转换为类型 “字符串”无效。在 Microsoft.VisualBasic.CompilerServices.Conversions.ToString对象 价值 MISys.Client.MIUltraDataGrid.MIUltraDataGrid.MIUltraDataGrid_InitializeRobject 发送方,初始值设定为WEVENTARG e Infragistics.Win.UltraWinGrid.InitializeRowEventHandler.InvokeObject 发送方,初始值设定为WEVENTARG e Infragistics.Win.UltraWinGrid.UltraGrid.OnInitializeRowWinInitializeRowEventArgs 注视 Infragistics.Win.UltraWinGrid.UltraGrid.FireEventGridId, 事件参数在 Infragistics.Win.UltraWinGrid.UltraGrid.FireInitializeRowEventArgs 注视 Infragistics.Win.UltraWinGrid.UltraGridRow.FireInitializeRow位于 Infragistics.Win.UltraWinGrid.RowsCollection.FireInitializeRowIList 争吵 Infragistics.Win.UltraWinGrid.RowsCollection.InitNonGroupByRowsIList FireInitializeroWon这些行位于 Infragistics.Win.UltraWinGrid.RowsCollection.SyncRowshellist 边界列表位于 Infragistics.Win.UltraWinGrid.RowsCollection.SyncRows位于 Infragistics.Win.UltraWinGrid.RowsCollection.EnsureRenotDirty位于 Infragistics.Win.UltraWinGrid.RowsCollection.GetEnumerator位于 MISys.Client.MIUltraDataGrid.MIUltraDataGrid.RefreshGrid位于 MISysForms.MIDetailsTemplate.RefreshGridsControl myparent位于 MISysForms.MIDetailsTemplate.RefreshGridsControl myparent位于 MISysForms.MIDetailsTemplate.RefreshGridsControl myparent位于 MISysForms.MIDetailsTemplate.RefreshGridsControl myparent位于 MISysForms.MIDetailsTemplate.Record在更改 MISysForms.MIItemDetails.RecordChanged于 MISysForms.MIDetailsTemplate.GetPreviousRecord位于 MISysForms.MIDetailsTemplate.UltraToolbarsManager\u工具ClickObject 发件人、工具单击事件参数 Infragistics.Win.UltraWinToolbars.UltraToolbarsManager.OnToolClickToolClickEventArgs 注视C# 如何避免T-SQL错误:从DBNull类型到String类型的转换无效,c#,sql-server,sql-server-2008,tsql,dbnull,C#,Sql Server,Sql Server 2008,Tsql,Dbnull,我使用下面的T-SQL将数据插入到由C构建的应用程序中,有些记录工作正常,但有些记录给出了以下错误 有关调用即时消息的详细信息,请参见此消息的结尾 JIT调试,而不是此对话框 **************异常文本*************System.InvalidCastException:从类型“DBNull”转换为类型 “字符串”无效。在 Microsoft.VisualBasic.CompilerServices.Conversions.ToString对象 价值 MISys.Clien
例如,询问您的datarow值是否不为null,然后您可以对其进行精细转换:
object Value = dataRow[columnName];
if (Value != DBNull.Value)
例如,询问您的datarow值是否不为null,然后您可以对其进行精细转换:
object Value = dataRow[columnName];
if (Value != DBNull.Value)
您可以使用上面的答案,或者如果您没有访问代码的权限,请将选择更改为插入空白而不是空值,假设您有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]);
您可以使用上面的答案,或者如果您没有访问代码的权限,请将选择更改为插入空白而不是空值,假设您有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]);
其中一列返回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]);
分享您正在使用的实际代码怎么样?如果您单击“详细信息”,它是否会更具体地告诉您错误来自何处?@TimFreese是的,我在问题的底部添加了问题所在。您发布了一条dotnet错误消息,您向我们显示的唯一代码是查询。您无法从sql获取该错误消息。如果你想找到真正的解决方案,你需要向我们展示dotnet代码。@SeanLange抱歉,我没有访问.Net部分的权限。如何共享你正在使用的实际代码?如果你单击“详细信息”,它是否会更具体地告诉你错误的来源?@TimFreese是的,我在问题的底部添加了问题。您发布了一条dotnet错误消息,您向我们显示的唯一代码是查询。您无法从sql获取该错误消息。如果你想真正有机会找到解决方案,你需要向我们展示dotnet代码。@SeanLange对不起,我没有访问.Net部分的权限