0

我使用 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 列。

目的是检测列宽是否为70,如果是,我需要将其扩展为其他大小,否则保留它。

我试过

SELECT COL_LENGTH(docEntry, fileName)

它引起了异常:

捕获到 SqlCeException:
列名无效。[节点名称(如果有)=,列名称= docEntry]

我不知道为什么...

有谁知道?

4

3 回答 3

2

认为你将不得不做很长的路要走:

SELECT character_maximum_length
FROM information_schema.columns
WHERE table_name = 'docentry'
AND column_name = 'filename'
于 2011-03-24T15:49:27.600 回答
1

除了来自@HadleyHope 的提供者特定解决方案之外,还有一个适用于所有数据库的解决方案(至少我通过 OleDB 尝试使用 mssql2005、oracle10、SQlite3 和 MsAccess。我的机器上没有 sqlce 可以验证): DbConnection.GetSchema()

此代码适用于 MsSql。

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

con = new SqlConnection() 如果SqlCeConnection 调用不支持“AllColumns” ,则必须替换con.GetSchema()以获取支持的属性列表。

有关详细信息,请参阅GetSchema - ADO.NET 2.0 中的 DbConnection.GetSchema - 从数据库连接msdn DbConnection.GetSchema()检索数据库表列视图等

于 2011-03-24T16:28:39.960 回答
-1

表名和列名需要用引号引起来:

SELECT COL_LENGTH('docEntry', 'fileName')
于 2011-03-24T15:42:31.740 回答