c # OleDbConnection Excel установить формат даты

Мы используем OleDBConnection для экспорта дат в таблицу Excel, но первые 12 дней каждого месяца автоматически изменяются в формате США (ММ/дд/гггг).

Это явно портит наши данные!

Мы проверили его во всем коде и знаем, что он меняется только тогда, когда мы создаем файл и вставляем даты.

Есть ли способ заставить даты быть в формате дд/мм/гггг?

ds.Tables[0].Rows[i][ds.Tables[0].Columns.Count - 1] — дата в формате дд/мм/гггг чч:мм:сс

    System.Data.OleDb.OleDbConnection newconn = new System.Data.OleDb.OleDbConnection();
            try
            {
                string pathOfFileToCreate = "U:\\Visual Studio 2013\\Projects\\ANN\\FresnoDataCOC102-2.xlsx";
                newconn.ConnectionString = String.Format(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=""Excel 12.0 Xml;HDR=YES"";", pathOfFileToCreate);
                newconn.Open();
                var cmd = newconn.CreateCommand();
                cmd.CommandText = "CREATE TABLE sheet1 (Date1 DATETIME, PanEObserved DOUBLE, PanECalculated DOUBLE)";
                cmd.ExecuteNonQuery();
                for (int i = 0; i < training; i++) // Sample Data Insert 
                {
                    int day = Convert.ToInt32(Convert.ToString(ds.Tables[0].Rows[i][ds.Tables[0].Columns.Count - 1]).Substring(0, 2));
                    int month = Convert.ToInt32(Convert.ToString(ds.Tables[0].Rows[i][ds.Tables[0].Columns.Count - 1]).Substring(3, 2));
                    int year = Convert.ToInt32(Convert.ToString(ds.Tables[0].Rows[i][ds.Tables[0].Columns.Count - 1]).Substring(6, 4));
                    DateTime date = new DateTime(year, month, day);

                    cmd.CommandText = String.Format("INSERT INTO Sheet1 (Date1, PanEObserved, PanECalculated) VALUES({0},{1},{2})", "#" + date + "#", ds.Tables[0].Rows[i][inputunits], outputs[i]);
                    cmd.ExecuteNonQuery(); // Execute insert query against excel file.
                }
            }
            finally
            {

                conn.Close();
            }

person Dan Haywood    schedule 26.02.2016    source источник
comment
Может быть, вы используете Date вместо datetime для вашего типа столбца?   -  person cdie    schedule 26.02.2016
comment
Мы пробовали это, но у нас все еще та же проблема   -  person Dan Haywood    schedule 02.03.2016
comment
Возможный дубликат несоответствия формата DateTime при импорте из листа Excel   -  person Johann    schedule 21.05.2019


Ответы (1)


Хорошим обходным решением было бы использовать вместо этого отформатированную строку:

System.Data.OleDb.OleDbConnection newconn = new System.Data.OleDb.OleDbConnection();
        try
        {
            string pathOfFileToCreate = "U:\\Visual Studio 2013\\Projects\\ANN\\FresnoDataCOC102-2.xlsx";
            newconn.ConnectionString = String.Format(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=""Excel 12.0 Xml;HDR=YES"";", pathOfFileToCreate);
            newconn.Open();
            var cmd = newconn.CreateCommand();
            cmd.CommandText = "CREATE TABLE sheet1 (Date1 String/varhcar(100), PanEObserved DOUBLE, PanECalculated DOUBLE)"; //Check how to declare a varchar exactly.
            cmd.ExecuteNonQuery();
            for (int i = 0; i < training; i++) // Sample Data Insert 
            {
                int day = Convert.ToInt32(Convert.ToString(ds.Tables[0].Rows[i][ds.Tables[0].Columns.Count - 1]).Substring(0, 2));
                int month = Convert.ToInt32(Convert.ToString(ds.Tables[0].Rows[i][ds.Tables[0].Columns.Count - 1]).Substring(3, 2));
                int year = Convert.ToInt32(Convert.ToString(ds.Tables[0].Rows[i][ds.Tables[0].Columns.Count - 1]).Substring(6, 4));
                DateTime date = new DateTime(year, month, day);
                String dateAux = date.ToString("dd/MM/yyyy");
                cmd.CommandText = String.Format("INSERT INTO Sheet1 (Date1, PanEObserved, PanECalculated) VALUES({0},{1},{2})", "#" + dateAux + "#", ds.Tables[0].Rows[i][inputunits], outputs[i]);
                cmd.ExecuteNonQuery(); // Execute insert query against excel file.
            }
        }
        finally
        {

            conn.Close();
        }
person Miquel Coll    schedule 26.02.2016
comment
Мы попробовали это, но это ничего не изменило. Все еще получаю ту же проблему - person Dan Haywood; 02.03.2016