C #: SqlCeParameter DbType для nVarChar? - PullRequest
1 голос
/ 20 июня 2011

Во-первых, мне нравится указывать типы данных, и я презираю AddWithValue функции.

Я создаю приложение локальной базы данных SqlCeServer 3.5 под .NET 4.0, которое будет работать на ПК пользователя.

При создании таблицы я использую NVarChar(50) для указания своих строковых полей.

Кажется, это работает нормально, и я могу открыть таблицу, чтобы проверить, все ли хорошо работает в Microsoft SQL Server Management Studio 2008 .

Когда я вставляю данные в свои таблицы, я использую

public static SqlCeParameter ParameterString(string ColumnName, string value) {
  SqlCeParameter p = new SqlCeParameter();
  p.ParameterName = string.Format("@{0}", ColumnName);
  p.DataType = DbType.String;
  p.Size = 50;
  p.Value = value;
  return p;
}

Когда я вставляю эти данные, ошибок нет, но данные не вставляются. Другие типы данных (int, DateTime, float и т. Д.) Вставляются без проблем.

В: Есть ли какие-то другие DbType, которые мне нужно указать, чтобы вставить как NVarChar?

Ответы [ 3 ]

3 голосов
/ 20 июня 2011

Перечисление DbType является общим для всех баз данных, поэтому оно не содержит всех типов данных, специфичных для SQL Server. Используйте SqlDbType:

SqlCeParameter p = new SqlCeParameter(ColumnName, SqlDbType.NVarChar, 50);
p.Value = value;
2 голосов
/ 20 июня 2011

Почему-то есть два свойства, которые вы можете использовать для установки типа: DbType и SqlDbType. По данным MSDN:

SqlDbType и DbType связаны между собой. Следовательно, установка DbType изменяет SqlDbType на поддерживающий SqlDbType.

Так что SqlDbType является основным типом, установка просто DbType меняет его на что-то близкое.

Вы также можете прочитать этот пост , где у них возникла проблема при указании Length s больше 255.

1 голос
/ 20 июня 2011

да,

SqlDbType.NVarChar

Надеюсь, это поможет

...