VB.net批量插入

时间:2012-06-14 20:52:36

标签: sql sql-server vb.net

关于'Bulk Insert'sql命令,我对某些法语口音有疑问。从文本文件插入后,'à'或'a acute'在数据库表中显示为n ++。这是唯一遇到当前转换问题的角色。我尝试使用'WITH'子句修改命令并分配诸如'RAW'或'1252'或'ACP'之类的值,但它们都不能保留此特定字符。我使用的数据库是Sql Server 2008.非常感谢任何帮助。谢谢。

仅供参考,我不使用任何编码或解码技术。只是尝试将文本文件中的任何内容放回数据库中。


感谢您的回复。但是,从'varchar'将列类型更改为'nvarchar'实际上并没有解决问题。它现在在数据库表列中显示为“∩┐╜”。有人在想吗?非常感谢提前

2 个答案:

答案 0 :(得分:1)

正如Bridge所说,你需要NVARCHAR。您还需要将文件转换为UTF-16,因为即使您使用BULK INSERTNVARCHAR也无法使用UTF-8。

有关详细信息,请参阅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);
    }

答案 1 :(得分:0)

将列类型更改为nvarchar