Поддерживается многобайтовая (не ascii строка) в драйвере Snowflake ODB C? - PullRequest
0 голосов
/ 21 апреля 2020

На портале с снежинками я создал одну таблицу, DDL, как показано ниже

create table test_multibytes(id int, varchar(16));

, затем вставил несколько строк, например

insert into myt_string2 values('1','中国我爱');
insert into myt_string2 values('2','こんにちは');
insert into myt_string2 values('2','你好');
insert into myt_string2 values('3','Tabelle enthält');
insert into myt_string2 values('4','안녕하세요');

Хорошо, когда я просматриваю данные с портала , но когда я получаю данные из таблицы через Snowflake ODB C Drvier, это не работает, каждый не-ascii символ отображается как '0x3f', что является '?'.

Затем я изменил свой Язык операционной системы компьютера для китайского, я могу правильно получить не-ascii (китайский), но не для немецкого и корейского рядов.

Get Data All:
"NAME", "COUNTRY"
"1", "中国我爱"
"2", "こんにちは"
"2", "你好"
"3", "Tabelle enth?lt"
"4", "?????"
5 rows fetched from 2 columns.

Есть ли какие-либо другие настройки, которые я могу сделать, чтобы это работало? или это ограничение для текущего драйвера odb c? С нетерпением жду хороших новостей для меня.

Большое спасибо.

Ответы [ 2 ]

0 голосов
/ 21 апреля 2020

Это также может быть проблема со шрифтом. Вам понадобится шрифт с поддержкой китайских, корейских и немецких символов.

0 голосов
/ 21 апреля 2020

Скорее всего, это ограничение элемента управления, отображающего данные.

У меня есть тестовый проект ODB C в C#, и я протестировал его с вашей таблицей в настольной таблице данных WPF Windows. Он отображает все ваши данные правильно.

enter image description here

У меня есть форма WPF с DataGrid с именем dataGrid1. Вот фрагмент кода, который заполняет его результатами запроса к Snowflake через ODB C:

   try
    {

        OdbcConnection DbConnection = new OdbcConnection("DSN=" + dsnBox.Text + 
                                                         ";uid=" + userNameBox.Text +
                                                         ";pwd=" + passwordBox.Password);

        OdbcCommand DbCommandSetup = DbConnection.CreateCommand();
        DbConnection.Open();
        DbCommandSetup.CommandText = "use warehouse " + warehouseName.Text + ";";
        DbCommandSetup.ExecuteNonQuery();

        OdbcCommand DbCommand = DbConnection.CreateCommand();
        DbCommand.CommandText = sqlStatement;

        OdbcDataReader DbReader = DbCommand.ExecuteReader();

        int fCount = DbReader.FieldCount;

        DataTable dt = new DataTable();
        DataRow dr = null;
        String fName = null;

        for (int i = 0; i < fCount; i++)
        {
            fName = DbReader.GetName(i);
            dt.Columns.Add(fName, System.Type.GetType("System.String"));
        }

        while (DbReader.Read())
        {
            dr = dt.NewRow();
            for (int i = 0; i < fCount; i++)
            {
                if (!DbReader.IsDBNull(i))
                {
                    dr[i] = DbReader.GetValue(i).ToString();
                }
                else
                {
                    dr[i] = "{NULL}";
                }

            }
            dt.Rows.Add(dr);
        }
        dt.AcceptChanges();
        dataGrid1.DataContext = dt.DefaultView;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...