2016-05-19 8 views
0

C#でビルドされたアプリケーションにデータを挿入するために、次のT-SQLを使用しました。T-SQLエラーを回避する方法:DBNull型から型文字列への変換が無効です

enter image description here

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

See the end of this message for details on invoking just-in-time (JIT) debugging instead of this dialog box.

************** Exception Text ************** System.InvalidCastException: Conversion from type 'DBNull' to type 'String' is not valid. at Microsoft.VisualBasic.CompilerServices.Conversions.ToString(Object Value) at MISys.Client.MIUltraDataGrid.MIUltraDataGrid.MIUltraDataGrid_InitializeRow(Object sender, InitializeRowEventArgs e) at Infragistics.Win.UltraWinGrid.InitializeRowEventHandler.Invoke(Object sender, InitializeRowEventArgs e) at Infragistics.Win.UltraWinGrid.UltraGrid.OnInitializeRow(InitializeRowEventArgs e) at Infragistics.Win.UltraWinGrid.UltraGrid.FireEvent(GridEventIds id, EventArgs e) at Infragistics.Win.UltraWinGrid.UltraGrid.FireInitializeRow(InitializeRowEventArgs e) at Infragistics.Win.UltraWinGrid.UltraGridRow.FireInitializeRow() at Infragistics.Win.UltraWinGrid.RowsCollection.FireInitializeRow(IList rows) at 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 Infragistics.Win.UltraWinGrid.RowsCollection.GetEnumerator() at MISys.Client.MIUltraDataGrid.MIUltraDataGrid.RefreshGrid() at MISysForms.MIDetailsTemplate.RefreshGrids(Control myparent) at MISysForms.MIDetailsTemplate.RefreshGrids(Control myparent) at MISysForms.MIDetailsTemplate.RefreshGrids(Control myparent) at MISysForms.MIDetailsTemplate.RefreshGrids(Control myparent) at MISysForms.MIDetailsTemplate.RecordChanged() at MISysForms.MIItemDetails.RecordChanged() at MISysForms.MIDetailsTemplate.GetPreviousRecord() at MISysForms.MIDetailsTemplate.UltraToolbarsManager1_ToolClick(Object sender, ToolClickEventArgs e) at Infragistics.Win.UltraWinToolbars.UltraToolbarsManager.OnToolClick(ToolClickEventArgs e) at ....

+4

実際のコードを共有するのはどうですか? –

+0

詳細をクリックすると、そのエラーの原因を具体的に教えてくれますか? –

+0

@TimFreeseはい私の質問の末尾に追加します – Kin

答えて

2

値がnullでない場合、たとえば、あなたは罰金それをキャストすることができ、あなたのDataRowを確認する:

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

あなたは上記の解答を使用することができますかコードにアクセスできない場合は、SQL Serverを持っていると仮定して、NULLの代わりに空白を挿入するようにSELECTを変更してください。

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]); 
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]); 
関連する問題