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

Это мой код:

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 ]

5 голосов
/ 01 марта 2011

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

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

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

0 голосов
/ 01 марта 2011

таким образом;)

 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}
}
...