Загрузите csv в oleDB и вынудите все выведенные типы данных представить в виде строки

Ре: PDO / MySQLi / MySQLND

gary

, который Вы не можете только сказать, "не использует MySQLi", поскольку у них есть различные цели. PDO почти похож на уровень абстракции (хотя это не на самом деле), и разработан, чтобы облегчить использовать несколько продуктов базы данных, тогда как MySQLi характерен для соединений MySQL. Неправильно сказать, что PDO является современным слоем доступа в контексте сравнения его к MySQLi, потому что Ваш оператор подразумевает, что прогрессия была mysql-> mysqli-> PDO, который не имеет место.

выбор между MySQLi и PDO прост - если необходимо поддерживать несколько продуктов базы данных тогда, Вы используете PDO. Если Вы просто используете MySQL тогда, можно выбрать между PDO и MySQLi.

Итак, почему Вы выбрали бы MySQLi over PDO? Посмотрите ниже...

@ross

Вы корректны о MySQLnd, который является новейшей библиотекой уровня базового языка MySQL, однако это не замена для MySQLi. MySQLi (как с PDO) остается способом, которым Вы взаимодействовали бы с MySQL через свой код PHP. Оба из них используют libmysql в качестве клиента C позади кода PHP. Проблема состоит в том, что libmysql за пределами базового механизма PHP, и это - то, где mysqlnd входит, т.е. это - Собственный Драйвер, который использует базовые внутренности PHP для увеличения эффективности, конкретно где использование памяти затронуто.

MySQLnd разрабатывается MySQL самостоятельно и недавно приземлился на ответвление PHP 5.3, которое находится в тестировании RC, готовом к выпуску позже в этом году. Вы тогда будете в состоянии использовать MySQLnd с MySQLi..., но не с PDO. Это даст MySQLi повышение производительности во многих областях (не все) и сделает его лучшим выбором для взаимодействия MySQL, если Вам не будет нужна абстракция как возможности PDO.

Однако MySQLnd теперь доступен в PHP 5.3 для PDO и таким образом, можно получить преимущества улучшений производительности от ND в PDO, однако, PDO является все еще универсальным слоем базы данных и так будет вряд ли, чтобы быть в состоянии извлечь выгоду так из улучшений в ND, как MySQLi может .

Некоторые полезные сравнительные тесты могут быть найдены здесь , хотя они с 2006. Также необходимо знать о вещах как эта опция .

, Там много соображений, которые должны быть приняты во внимание при решении между MySQLi и PDO. Это действительность, это не будет иметь значение, пока Вы не добираетесь до смехотворно высоких чисел запроса и в этом случае, имеет больше смысла использовать расширение, которое было специально предназначено для MySQL, а не того, какие вещи кратких обзоров и, оказывается, обеспечивает драйверу MySQL.

Это не простой вопрос, из которого является лучшим, потому что у каждого есть преимущества и недостатки. Необходимо прочитать ссылки, которые я предоставил и придумал собственное решение, затем тестирую его и узнаю. Я использовал PDO в прошлых проектах, и это - хорошее расширение, но моим выбором для чистой производительности был бы MySQLi с новой скомпилированной опцией MySQLND (когда PHP 5.3 выпущен).

5
задан John Nicholas 6 November 2009 в 16:06
поделиться

2 ответа

Проведено ли какое-то исследование, и ответ - использовать schema.ini, но генерировать его на лету для вашего набора данных.

http://msdn.microsoft.com/en-us/library/ ms709353 (VS.85) .aspx

содержит необходимую информацию. для построения схемы:

   public static void ConstructSchema(FileInfo theFile)
    {
        StringBuilder schema = new StringBuilder(); 
        DataTable data = LoadCSV(theFile); 
        schema.AppendLine("[" + theFile.Name + "]");
        schema.AppendLine("ColNameHeader=True"); 
        for (int i = 0; i < data.Columns.Count; i++)
        {
            schema.AppendLine("col" + (i + 1).ToString() + "=" + data.Columns[i].ColumnName + " Text");
        }   
        string schemaFileName = theFile.DirectoryName + @"\Schema.ini";
        TextWriter tw = new StreamWriter(schemaFileName);   
        tw.WriteLine(schema.ToString());
        tw.Close();  
    }

для загрузки csv как datatable

public static DataTable LoadCSV(FileInfo theFile)
    {   
        string sqlString = "Select * FROM [" + theFile.Name + "];";
        string conStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="
            + theFile.DirectoryName + ";" + "Extended Properties='text;HDR=YES;'";
        DataTable theCSV = new DataTable();

        using (OleDbConnection conn = new OleDbConnection(conStr))
        {
            using (OleDbCommand comm = new OleDbCommand(sqlString, conn))
            {
                using (OleDbDataAdapter adapter = new OleDbDataAdapter(comm))
                {
                    adapter.Fill(theCSV);
                }
            }
        }
        return theCSV;
    }

для преобразования в xml

 public static XElement GetXMLFromCSV(FileInfo theFile, string rootNodeName, string itemName)
    {
        XElement retVal;
        DataTable data;
        data = CrateCsvAndSchema(theFile); 
        DataSet ds = new DataSet(rootNodeName);
        data.TableName = itemName;
        ds.Tables.Add(data); 
        retVal = XElement.Parse(ds.GetXml());  
        return retVal;
    }
6
ответ дан 14 December 2019 в 13:40
поделиться

Для чтения CSV в DataTable я рекомендую этот парсер CSV .

Это действительно легко использовать. Вот как вы можете использовать его для заполнения DataTable данными из разделенных запятыми, цитируя CSV:

0
ответ дан 14 December 2019 в 13:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: