2016-07-14 7 views
0

私はcsvファイルをSQLサーバにインポートする必要があるSQL一括コピーウィンドウアプリケーションに取り組んでいます。しかし、IPアドレスのデータには問題があるようです。csvファイル内のIPアドレスをsqlサーバにインポートする際の問題

CSVファイルのデータをカンマ区切りやサンプルデータが

Email,FirstName,LastName,Company,Address1,Address2,City,State/Province,Zip/PostalCode,Country,Phone,SecondaryPhone,Fax,DateEntered,OriginalIP,LatestIP 
[email protected],,,,,,,,,,,,,2/29/16 15:56,12.251.217.166,12.251.217.166 
[email protected],,,,,,,,,,,,,2/29/16 15:57,70.57.244.202,70.57.244.202 

以下のようである。しかし、インポートすると、最後の2列はlastipとlatestipすなわち除いて、すべてが大丈夫です..

値がインポートされているが

です
12.2512,12.2512 for 1st row and same for 2nd row ie. 70.5724 ,70.5724 

コードは以下の通りである

DataSet ds = new DataSet(); 
      try 
      { 
       // Creates and opens an ODBC connection 
       string strConnString = "Driver={Microsoft Text Driver (*.txt; *.csv)};Dbq=" + this._dirCsv.Trim() + ";Extensions=asc,csv,tab,txt;Persist Security Info=False"; 
       string sqlSelect; 
       OdbcConnection conn; 
       conn = new OdbcConnection(strConnString.Trim()); 
       conn.Open(); 

       //Creates the select command text 
       if (numberOfRows == -1) 
       { 
        sqlSelect = "select * from [" + this.FileNevCsv.Trim() + "]"; 
       } 
       else 
       { 
        sqlSelect = "select top " + numberOfRows + " * from [" + this.FileNevCsv.Trim() + "]"; 
       } 

       //Creates the data adapter 
       OdbcDataAdapter objOledbDa = new OdbcDataAdapter(sqlSelect, conn); 

       //Fills dataset with the records from CSV file 
       objOledbDa.Fill(ds, "csv"); 

       //closes the connection 
       conn.Close(); 
      } 
      catch (Exception e) //Error 
      { 
       MessageBox.Show(e.Message, @"Error - LoadCSV", MessageBoxButtons.OK, MessageBoxIcon.Error); 
      } 
      return ds; 

。解決ここでは、この

レH @

private void WriteSchema() 
     { 
      try 
      { 
       FileStream fsOutput = new FileStream(this._dirCsv + "\\schema.ini", FileMode.Create, FileAccess.Write); 
       StreamWriter srOutput = new StreamWriter(fsOutput); 
       string s1, s2, s3, s4, s5; 

       s1 = "[" + this.FileNevCsv + "]"; 
       s2 = "ColNameHeader=" + chkFirstRowColumnNames.Checked.ToString(); 
       s3 = "Format=" + this._strFormat; 
       s4 = "MaxScanRows=25"; 
       s5 = "CharacterSet=" + this._strEncoding; 

       srOutput.WriteLine(s1.ToString() + "\r\n" + s2.ToString() + "\r\n" + s3.ToString() + "\r\n" + s4.ToString() + "\r\n" + s5.ToString()); 
       srOutput.Close(); 
       fsOutput.Close(); 
      } 
      catch (Exception ex) 
      { 
       MessageBox.Show(ex.Message, @"writeSchema"); 
      } 
      finally 
      { } 
     } 
+1

これはIPアドレスのようです10進数として解析/解釈されます...データベース内のターゲット列のデータ型は何ですか? – bassfader

+0

nvarchar(4000)はdatattypeですが、グリッドにデータをロードする場合も上記のコードはデータをロードすることです..同じ出力もあります – Mahajan344

+1

テスト目的のために - (double?)最初の2〜3行のIPアドレスを引用符で囲み、何が表示されるのかを確認します。 IMHOこの問題はMSSQLに関連するのではなく、 'Microsoft Text Driver'がどのようにファイルの内容を解釈するのかに関係しています。ファイルの隣にschema.iniファイルがない場合、ドライバは読み込みしようとしているものを把握するために「最善のもの」を試します。最後の列について間違っているように思われるので、schema.iniファイルを追加してみてください(cf https://msdn.microsoft.com/en-us/library/ms709353(v=vs.85).aspx) – deroby

答えて

0

おかげで、以下のようであり、スキーマファイルに列データ型を追加 を@deroby

[CONTACTS Jan Feb 2016 New.csv] 
ColNameHeader=True 
Format=Delimited(,) 
MaxScanRows=25 
CharacterSet=ANSI 

以下とスキーマ書き込みコードとして schema.iniというですスキーマファイルが更新されました

[CONTACTS Jan Feb 2016 New.csv] 
ColNameHeader=True 
Format=Delimited(,) 
MaxScanRows=25 
CharacterSet=ANSI 
Col1="Email" Text 
Col2="FirstName" Text 
Col3="LastName" Text 
Col4="Company" Text 
Col5="Address1" Text 
Col6="Address2" Text 
Col7="City" Text 
Col8="State/Province" Text 
Col9="Zip/PostalCode" Text 
Col10="Country" Text 
Col11="Phone" Text 
Col12="SecondaryPhone" Text 
Col13="Fax" Text 
Col14="DateEntered" Text 
Col15="OriginalIP" Text 
Col16="LatestIP" Text 
関連する問題