2012-06-14 4 views
0

Его команда 'Bulk Insert' sql, где у меня проблема относительно некоторых французских акцентов. «Я» или «Острый» появляется как n ++ в таблице базы данных после того, как я вставляю их из текстового файла. И это единственный символ, который имеет проблемы с текущим преобразованием. Я попытался изменить команду, используя предложение WITH и присвоить значение, такое как «RAW» или «1252» или «ACP», но ни один из них не смог сохранить этот конкретный символ. Я использую базу данных Sql Server 2008. Приветствуется любая помощь. Благодарю.VB.net Bulk Insert

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


Благодарим за отзыв. Однако изменение типа столбца на «nvarchar» из «varchar» действительно не решило проблему. Теперь он отображается как «∩┐╜» в столбце таблицы базы данных. Любые идеи люди ??? Большое спасибо заблаговременно

+0

Там проблема кодировки происходит здесь - обеспечить вы используете UTF-8. –

+0

Каким типом данных является столбец, в который вы вставляете данные? Он должен быть nvarchar или ntext (хотя это обесценивается), чтобы хранить данные Unicode. – Bridge

+0

Я использую varchar. – Sanjay

ответ

1

Как говорит Бридж, вам понадобится NVARCHAR. Вам также нужно будет преобразовать файл в UTF-16, так как BULK INSERT не играет хорошо с UTF-8, даже если вы используете NVARCHAR.

Для получения дополнительной информации см. this question.

Есть несколько вопросов здесь относительно преобразования кодировки файлов, но и для записи это работало для меня:

public static void ConvertUtf8ToUtf16(string path, int bufferSize = 4096) 
    { 
    string tempPath = path + ".tmp"; 

    char[] buffer = new char[bufferSize]; 
    using (var input = File.OpenText(path)) 
    using (var output = new StreamWriter(tempPath, false, Encoding.Unicode)) 
     { 
     int index = 0; 
     int chars; 
     while ((chars = input.Read(buffer, index, bufferSize)) > 0) 
      output.Write(buffer, 0, chars); 
     } 

    // Swap the files 
    File.Delete(path); 
    File.Move(tempPath, path); 
    } 
+0

Спасибо за ответ. Однако изменение типа столбца на «nvarchar» из «varchar» действительно не решило проблему. Теперь он отображается как «∩┐╜» в столбце таблицы базы данных. Любая идея – Sanjay

+0

Это еще не все решение. Что такое кодировка символов вашего файла? 'BULK INSERT' является обидчивым. –

0

Измените тип столбца на nvarchar.

+0

Привет, Спасибо за ответ. Однако изменение типа столбца на «nvarchar» из «varchar» действительно не решило проблему. Теперь он отображается как «∩┐╜» в столбце таблицы базы данных. Есть идеи. – Sanjay

+0

Дополнительная информация: Я вставляю эти французские символы из текстового файла в таблицу базы данных. Я использую Bulk Insert для этого. спасибо – Sanjay

+0

@Sanjay - этот файл большой вставки не находится в UTF-16, и это ваша проблема. –