При использовании OleDBDataReader для выбора мемо-поля из базы данных Access он возвращает только часть строки. Как я могу получить всю строку?

Это мой код:

OleDbConnection connection = new OleDbConnection(
   "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=c:\\Offline.accdb;Persist Security Info=False");
connection.Open();
OleDbCommand command = connection.CreateCommand();
command.CommandText = "SELECT DISTINCT B.* FROM BlankFormSubmissions B, Actions A WHERE A.FormName = 'FindingNemo' AND B.ProcessName = A.ProcessName AND B.ActionName = A.ActionName AND B.ID = 12 OR B.ID = 13 OR B.ID = 14 ORDER BY B.ID";
OleDbDataReader reader = command.ExecuteReader();
while (reader.Read())
{
    string xml = (string)reader["XML"];
    // ... do something with xml
}

Столбец "XML" является столбцом таблицы Access Database типа memo.

Значение xml всегда содержит только первые символы XML. Я предполагаю, что это первые 256 символов. Очевидно, мне нужны все символы в строке.

Кто-нибудь знает, как это исправить?

Спасибо:)

2 ответа

Решение

Проблемой может быть само поле заметки;

Мемо-поля нельзя использовать в агрегированных аргументах (например, Max, Var, Sum и т. Д.). При использовании в итоговых значениях "По группам" в запросе возвращаются только первые 255 символов. Предложения "Имея" и "Где" в функциях агрегирования групп также возвращают только первые 255 символов. Однако использование аргументов "Первый" или "Последний" возвращает всю длину строки.

Это весь оператор SQL?

Сюда;)

 OleDbCommand sqlcmdCommand1 = new OleDbCommand("select stmt", sqlconConnection);
        sqlcmdCommand1.CommandType = CommandType.Text;
        try
        {
            sqlconConnection.Open();
            OleDbDataReader sdaResult = sqlcmdCommand1.ExecuteReader();
            myclass a = new myclass();
            while (sdaResult.Read())
            {

               a.i = sdaResult.GetString(2);
               or 
               int i = sdaResult.GetString(2)); 
              // 2 is the index of your column, in general start from 0;'
            }

если это не работает, я имею в виду, если значение my_memo_value равно нулю, то: создайте класс, в котором вы получите, и установите значение string и int. а затем использовать его здесь

Myclass {
Public int i{get;set}
}
Другие вопросы по тегам