Member 13917889 Ответов: 2

SDF-файл преобразуется в CSV-файл.


Эй, я пытаюсь сделать конвертер, который может передавать SDF-файл в CSV-файл. Но я не знаю, почему это не работает.. Раздел, который вы можете увидеть здесь, я почти вылез из интернета..

private void button2_Click(object sender, EventArgs e)
        {
            
            SqlCeConnection conn = null;
            SqlCeCommand cmd = null;
            SqlCeDataReader rdr = null;

            try
            {
                System.IO.TextWriter stm = new System.IO.StreamWriter(new System.IO.FileStream(@"D:\\TEST\Data.csv", System.IO.FileMode.Create), Encoding.Default);
                while ()
                {
                    
                    for (int i = 0; i < rdr.FieldCount - 2; i++)
                    {
                        if (rdr[i] != null)
                        {
                            stm.Write(rdr[i].ToString());
                            stm.Write(";");
                        }
                        else
                        {
                            stm.Write(";");
                        }
                    }
                    if (rdr[rdr.FieldCount - 1] != null)
                    {
                        stm.Write(rdr[0].ToString());
                    }
                    stm.Write(System.Environment.NewLine);
                }
                stm.Close();
                rdr.Close();
                cmd.Dispose();
            }
            finally
            {
                conn.Close();
            }
        }


Что я уже пробовал:

Ничего, я поискал в интернете, но ничего не нашел...

2 Ответов

Рейтинг:
2

Jochen Arndt

Повторное использование некоторого кода, найденного в сети, требует его понимания.

Первое, что нужно сделать перед написанием (или копированием) любого кода, - это ознакомиться с данными, подлежащими обработке. В вашем случае это так SQL Server Compact - Википедия[^] и Значения, разделенные запятыми - Википедия[^].

Для последнего ваш код выглядит в основном нормально, кроме отсутствующей поддержки кавычек (поля, содержащие разрыв строки, двойную кавычку или разделительный символ, должны быть заключены в кавычки, а двойные кавычки в полях должны быть экранированы другой двойной кавычкой).

Но это никогда не сработает, потому что ваш rdr является null.

Вы должны знать, как получить доступ к SDF-файлам с помощью DataReader. Это покрывается документацией используемых классов, таких как Класс SqlCeDataReader (System.Data.SqlServerCe)[^] который также содержит пример кода.

Наконец, вы должны использовать операторы SQL, которые применяются к вашему файлу базы данных. То есть вы должны знать имя(имена) таблицы(таблиц), которые вы хотите экспортировать в CSV-файл(Ы), и синтаксис SQL для запроса данных из таблицы.


Рейтинг:
19

OriginalGriff

Это не сработает, потому что вы никогда ничего не назначаете rdr:

SqlCeDataReader rdr = null;

try
{
    System.IO.TextWriter stm = new System.IO.StreamWriter(new System.IO.FileStream(@"D:\\TEST\Data.csv", System.IO.FileMode.Create), Encoding.Default);
    while ()
    {

        for (int i = 0; i < rdr.FieldCount - 2; i++)
Пока вы этого не сделаете, это всегда будет завершаться ошибкой с нулевым ссылочным исключением.

И кстати: искать код в интернете и пытаться использовать его, ничего не зная о том, что вы делаете, - это не "пытаться сделать конвертер", а надеяться и молиться о том, чтобы произошло чудо. Этого не будет. Даже если вы найдете рабочий код, который выполняет именно ту работу, которая вам нужна в чужой программе, вам нужно понять код и то, как он работает, а затем изменить его, чтобы сделать эту работу в своей...