【解決方法】System.invalidoperationexception: 指定された列名「ミリ秒」がどの列とも一致しません


csv データを SQL Server にインポートするためのウィンドウ アプリケーション。

csv ファイルからのデータをインポートして、データベースに保存できます。 ただし、データベーステーブルにすべての列があり、csvfile の 1 つの列にはない場合に追加する方法はありますが、そのデータベースの csv ファイルから他のデータ列を保存します。 たとえば、データベースには列があります [datatime]、[milliseconds]、[pressure] テーブル。 csvファイルにはデータテーブルがあります [datetime] 、 [pressure]. csvデータをSQLサーバーにインポートする方法。

System.InvalidOperationException: ‘The given ColumnName ‘Milliseconds’ does not match up with any column in data source’ というエラーが表示されるためです。

私が試したこと:

C#
private void btnselect_Click(object sender, EventArgs e)
        {
            //open serach file to recognise by the 
            OpenFileDialog ofd = new OpenFileDialog();
            ofd.DefaultExt = ".csv";
            ofd.Filter = "Comma Separated(*.csv)|*.csv";
            ofd.ShowDialog();
            textfilename.Text = ofd.FileName;
        }

        private DataTable GetDataTabletFromCSVFile(string csv_file_path)
        {
            DataTable csvData = new DataTable();
            try
            {
                using (TextFieldParser csvReader = new TextFieldParser(csv_file_path))
                {
                    csvReader.SetDelimiters(new string[] { "," });
                    csvReader.HasFieldsEnclosedInQuotes = true;
                    string[] colfields = csvReader.ReadFields();
                    foreach(string column in colfields)
                    {
                        while (! csvReader.EndOfData)//eth
                        {
                            string[] fieldData = csvReader.ReadFields();
                            
                            for (int i = 0; i < fieldData.Length; i++)
                            {
                                if (fieldData[i] == "")
                                {
                                    fieldData[i] = null;
                                }
                            }
                            csvData.Rows.Add(fieldData);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                return null;
            }
            return csvData;
        }
        private void btnImport_Click(object sender, EventArgs e)
        {
            {
                Cursor = Cursors.WaitCursor;
                DataTable dt = GetDataTabletFromCSVFile(csv_file_path);
                if (dt == null) return;
                SaveImportDataToDatabase(dt);
                MessageBox.Show("Data Import success!");
                textfilename.Text = string.Empty;
                Cursor = Cursors.Default;
            }
        }

 private void SaveImportDataToDatabase(DataTable SS)
        {
            using (SqlConnection conn = new SqlConnection(@"Data Source=ytl//bku; Initial Catalog=databse; User Id=***; Password=*****"))
            {
                conn.Open();
                using (SqlBulkCopy sqlbc = new SqlBulkCopy(conn))
                {
                    sqlbc.DestinationTableName = "SS";
                    sqlbc.ColumnMappings.Add("DateTime", "DateTime");
                    sqlbc.ColumnMappings.Add("Milliseconds", "Milliseconds");
                    sqlbc.ColumnMappings.Add("Pressure", "Pressure");

sqlbc.WriteToServer(SS);
                    MessageBox.Show("Bulk data stored ");

解決策 1

CSV データを含む DataTable に「ミリ秒」列を追加し、適切なデフォルト値を指定する必要があります。

コメント

タイトルとURLをコピーしました