Максимальная длина параметра ODBC 1999, когда должна быть 4000 - PullRequest
0 голосов
/ 20 декабря 2011

Я пытаюсь сделать простой запрос из таблицы, используя ODBC, c # и Sql Server 2000/2005/2008

С учетом следующей таблицы:

create table users ( 
    name nvarchar(50)
) 

Если я запускаюследующее:

insert into users select 'Administrator'

У меня должна быть 1 запись в БД с 50 а.Затем я пытаюсь выполнить следующий выбор из c #.

using (var conn = new OdbcConnection(connstr))
{
    conn.Open();
    var comm = conn.CreateCommand();
    comm.CommandText = "select name from users where name = ?";

    var par = comm.CreateParameter();
    par.Value = "Administrator";
    par.Size = 2000;  //So that query plan is cached
    comm.Parameters.Add(par);

    Console.WriteLine(comm.ExecuteScalar());
}

Это дает следующую ошибку:

Необработанное исключение: System.Data.Odbc.OdbcException: ERROR [42000][Microsoft] [Собственный клиент SQL Server 10.0] [SQL Server] Типы данных nvarchar и ntext несовместимы в операторе равенства.

Если изменить DbType на DbType.StringFixedLength, он будет работать нормальноэтот же код работает нормально при использовании родного драйвера.

Единственный способ, которым это будет работать, - это если строка меньше 2000. Не может быть 2000.

У кого-нибудь есть идеи?

1 Ответ

0 голосов
/ 20 декабря 2011

Хотя я сильно сомневаюсь в дизайне вашей базы данных, вы можете быстро и грязно решить эту проблему, изменив = на LIKE

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...