отображение типов каркасов .net в dbtype, странную строку, nvarchar и char

Я нашел информацию о сопоставлении строкового типа (.net framework type) и соответствующего nvarchar (dbtype) в msdn , в котором говорится:

«Это неявное преобразование завершится неудачно, если строка больше максимального размера NVarChar, которая составляет 4000 символов. Для строк размером более 4000 символов явно задается SqlDbType. '

Я просто не могу понять, что означает «явно установленный». поэтому я пишу код следующим образом:

char[] c = new char[5000]; for (int i = 0; i < 5000; i++) { c[i] = 'a'; } string s = new string(c); using (SqlConnection conn = new SqlConnection(connstr)) { conn.Open(); // create command object var comm = conn.CreateCommand(); comm.CommandText = "select @s"; // create parameter for command var p = comm.CreateParameter(); p.ParameterName = "@s"; // p.DbType = DbType.String; // p.Size = 5000; p.Value = s; // add parameter to command comm.Parameters.Add(p); // execute command var r = comm.ExecuteScalar(); } 

как вы видите, я не задал тип параметра и размер параметра, поэтому, основываясь на инструкциях на msdn, я думал, что во время выполнения будет исключение. но, к сожалению, он работает совершенно правильно, результат r был строкой, содержащей 5000 'a'. на самом деле , независимо от того, я комментирую или раскомментирую код установки типа параметра, размер, результат r всегда будет правильным, всегда будет одинаковым.

PLZ помочь мне, я неправильно понял что-то о инструкции по msdn?

Спасибо.

Я не совсем уверен, в чем ваш вопрос. Вы смущены, потому что в документации говорится одно: но вы можете сделать что-то еще?

Вы явно задаете тип параметра, используя следующие …

 var p = comm.CreateParameter(); p.SqlDbType = System.Data.SqlDbType.VarChar; p.Size = 5000; p.ParameterName = "@s"; p.Value = 'c'; 

Изменить: на основе документации, которую вы включили, как я ее интерпретирую, размер может быть больше 4000; вам просто нужно явно указать SqlDbType. Раньше, когда я сталкивался с этим, поведение заключалось в том, что он обрезал бы данные, или это дало бы мне ошибку, указав, что строковые или двоичные данные будут усечены.

К сожалению, SqlServer не самый сильный набор навыков.

  • Вычисленное поле резюме на основе дочернего стола
  • «Ожидание работы с задержкой» при чтении записей
  • Отключить чтение / запись в таблицу через SqlTransaction в .net?
  • Вставьте большой размер данных из файла txt, csv в таблицу SQL Server с несколькими недопустимыми строками
  • Результаты WAITFOR RECEIVE компенсируются / задерживаются на 1 результат
  • Получение числовой точности в случае внутреннего типа данных sql-сервера
  • Выбор и вставка SQL Server
  • проблема литья из SqlDataReader
  • Получить отношения таблицы
  • Программно создавая SQL db
  • SqlBulkCopy из списка <>
  • Давайте будем гением компьютера.