2017-05-11 3 views
0

テキストファイルからNULL値をMSSQLに挿入する際に問題があります。 NULL値を数値に置き換えると問題なく動作します。 2列は、NULLを許可するように設定テキストファイルのINSERT INTO MSSQLにINTEGERのNULL値が含まれています

PublicationCaptionとPublicationNumberは

ここでテキストファイルの例である

1#DI#Dagensインダストリーの#435#358#2016年10月19日 2 #DN#Dagens Nyheter#NULL#359#2016-10-19

私はこの作業をするために何かを追加する必要があるコードでforeachループに何らかの問題があると思います。ここで

は、私はImは(入力文字列が正しくない形式を持っていた。PublicationNumber列に格納することができません。Int32型が期待されている。)取得デバッグ時に

public static DataTable Publication() 
    { 

     DataTable dtPublication = new DataTable(); 

     dtPublication.Columns.AddRange(new DataColumn[6] { new DataColumn("ID", System.Type.GetType("System.Int32")), 
     new DataColumn("PublicationCode", System.Type.GetType("System.String")), 
     new DataColumn("PublicationCaption",System.Type.GetType("System.String")), 
     new DataColumn("PublicationNumber", System.Type.GetType("System.Int32")), 
     new DataColumn("ProductNumber", System.Type.GetType("System.Int32")), 
     new DataColumn("CreatedDate", System.Type.GetType("System.DateTime")), 

     }); 

     for (int i = 0; i < dtPublication.Columns.Count; i++) 
     { 
      dtPublication.Columns[i].AllowDBNull = true; 
     } 

     string txtData = File.ReadAllText(@"C:\Publication2.txt", System.Text.Encoding.Default); 

     foreach (string row in txtData.Split('\n')) 
     { 

      if (!string.IsNullOrEmpty(row)) 
      { 

       dtPublication.Rows.Add(); 

       int i = 0; 
       foreach (string cell in row.Split('#')) 
       { 

        dtPublication.Rows[dtPublication.Rows.Count - 1][i] = cell; 

        i++; 

       } 
      } 
     } 

     return dtPublication; 
    } 

を使用しているコードです。

私はこの問題を解決するためにいくつか助言が必要です。 お時間をいただきありがとうございます。

+0

WORD NULLの代わりに文字列に空白があるとしたらどうなりますか? Like 1#DI#Dagens Industri#435#358#2016-10-19 2#DN#Dagens Nyheter ## 359#2016-10-19 – Whencesoever

+0

もし 'int.Parse(cell)'を使うならば。一般的に、デバッガを使用します。それが失敗したときのセルの価値は何ですか? –

+0

@ 入力文字列が不正な形式であったため、PublicationNumber列に<>を格納できませんType Int32が必要です) –

答えて

0

データベースには、実際に挿入しようとしている "NULL"文字列がnull値を意味することがわかりません。この問題を解決するには、DBNull.Valueをに「NULL」という文字列を変更します。

if (cell == "NULL") 
    dtPublication.Rows[dtPublication.Rows.Count - 1][i] = DBNull.Value; 
else 
    dtPublication.Rows[dtPublication.Rows.Count - 1][i] = cell; 
+0

これはforeachループがうまくいかない場合に発生します。 入力文字列の形式が正しくないため、ID列にを格納できません。タイプInt32が必要です。) –

+0

この解決策は、 –

0

DataTableにヌル値を許可するフィールドに文字列"NULL"を翻訳する機能はありません。

object value = DBNull.Value; 
if(!"NULL".Equals(cell, StringComparison.InvariantCultureIgnoreCase)) 
    value = cell; 
dtPublication.Rows[dtPublication.Rows.Count - 1][i] = value; 
+0

これはどのように実装できますか? Im worng syntaxを取得中 'StringComparsion'という名前が現在のコンテキストに存在しません。 –

+0

@HenriThiesen:私の答えを見てください;) –

+0

これは解決策だと思っていますが、私のforeachloopはIDを今すぐジャンプし、これを実装するときに2番目の列から開始します。 –

関連する問題