.net, CSV Export TO Datatable, значение нескольких столбцов пустое - PullRequest
0 голосов
/ 13 января 2012

У меня проблема, когда я хочу получить некоторые данные из файла CSV в базу данных, мой setp как fllow:

  1. Я получаю этот CSV-файл по специальному пути
  2. вставка в таблицу данных
  3. перенос данных из базы данных в базу данных

сейчас. когда я получаю доступ к № 2, я нахожу, что значение 2 coulmns пустое, кто может мне помочь ??

Спасибо

мой код:

DataTable dt = new DataTable();

        string _filePath, _fileName;
        _filePath = strFileName.Substring(0, strFileName.LastIndexOf(@"\") + 1);
        _fileName = strFileName.Substring(strFileName.LastIndexOf(@"\") + 1);

        string excelConnectionString;
        //string strFileName = @"D:\TestFile\Prelim\USG\aaa.xlsx";            
        //string excelConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source= " + _filePath + @"\" + ";Extended Properties=\"Text;HDR=Yes;FMT=Delimited\"";
        try
        {                
            excelConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;" + "Data Source=" + _filePath + @"\" + ";Extended Properties=\"Text;HDR=Yes;FMT=Delimited\"";
        }
        catch
        {
            excelConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + _filePath + @"\" + ";Extended Properties=\"Text;HDR=Yes;FMT=Delimited\"";
        }

        try
        {
            OleDbConnection excelConnection = null;
            using (excelConnection = new OleDbConnection(excelConnectionString))
            {
                OleDbDataAdapter apter = new OleDbDataAdapter("Select * from " + _fileName, excelConnection);

                apter.Fill(dt);
            }
        }
        catch (Exception ex)
        {
            throw;
        }

        return dt;

1 Ответ

0 голосов
/ 13 января 2012

Первый шаг - убрать шум.обе попытки / ловли бесполезны.первый никогда не выбросит, потому что вы просто объединяете строки.вторая не даст никакого значения, это то же самое, что не перехватывать вообще.

Я полагаю, что вы хотите использовать имя таблицы для имени таблицы, а не имя файла.и после заполнения таблицы данных вам необходимо сохранить эти записи в базе данных.

var connectionString = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=""Text;HDR=Yes;FMT=Delimited""");
using(var connection = new OleDbConnection(connectionString))
using(var command = connection.CreateCommand())
{
    connection.Open();
    command.CommandText = "select * from [Sheet1]";

    var table = new DataTable();
    using(var reader = command.ExecuteReader())
    {
         table.Load(reader);
         return table;
    }
}

, затем вы можете использовать эту таблицу для заполнения базы данных

var connectionString = "sql connection string";
using(var connection = new SqlConnection(connectionString))
{
    connection.Open();
    using(var tx = connection.BeginTransaction())
    {
        try
        {
            foreach(DataRow row in table.Rows)
            {
                using(var command = connection.CreateCommand())
                {
                   command.CommandText = "insert into table (columns...) values (@p1,...)";
                   //add parameters to command
                   command.ExecuteNonQuery();
                } 
             }
             tx.Commit();
        }
        catch
        {
           tx.RollBack();
           throw;
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...