Как узнать длину столбца SQL Server CE - PullRequest
0 голосов
/ 24 марта 2011

Я создал таблицу с использованием SQL Server CE следующим образом:

SqlCeCommand createTableCmd = new SqlCeCommand();
createTableCmd.CommandText = "Create table docEntry (id nvarchar (70) not null PRIMARY KEY, "
                + "parent nvarchar(70), "
                + "lmt bigint not null, "
                + "fileName nvarchar(70) not null)";

Имя таблицы docEntry, а ширина столбца, которую мне нужно узнать, это fileName column.

Цель состоит в том, чтобы определить, равна ли ширина столбца 70, если да, мне нужно расширить его до другого размера, иначе оставить его.

Я пытался

SELECT COL_LENGTH(docEntry, fileName)

вызвано исключение:

SqlCeException было обнаружено:
Имя столбца недопустимо. [Имя узла (если есть) =, имя столбца = docEntry]

Не знаю почему ...

Кто-нибудь знает?

Ответы [ 3 ]

2 голосов
/ 24 марта 2011

Думаю, вам придется проделать долгий путь:

SELECT character_maximum_length
FROM information_schema.columns
WHERE table_name = 'docentry'
AND column_name = 'filename'
1 голос
/ 24 марта 2011

Помимо решения для конкретного провайдера от @HadleyHope есть решение, которое работает для всех Dabases (по крайней мере, я пробовал с mssql2005, oracle10, SQlite3 и MsAccess через OleDB. У меня нет sqlce на моей машине для проверки): DbConnection.GetSchema ()

Этот код работает для MsSql.

        using (DbConnection con = new SqlConnection())
        {
            con.ConnectionString = ...;
            con.Open();
            DataTable tabeWithSchemaInfo = con.GetSchema("AllColumns");

Вы должны заменить con = new SqlConnection() если «AllColumns» не поддерживается вызовом SqlCeConnection con.GetSchema(), чтобы получить список поддерживаемых свойств.

Подробнее см. GetSchema - DbConnection.GetSchema в ADO.NET 2.0 - получение представлений столбцов таблиц баз данных и т. Д. Из соединения с базой данных и msdn DbConnection.GetSchema ()

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

Имена таблиц и столбцов должны быть в кавычках:

SELECT COL_LENGTH('docEntry', 'fileName')
...