我使用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]
我不知道为什么......
有谁知道?
答案 0 :(得分:2)
认为你必须做很多事情:
SELECT character_maximum_length
FROM information_schema.columns
WHERE table_name = 'docentry'
AND column_name = 'filename'
答案 1 :(得分:1)
<击> 除了来自@HadleyHope的提供商特定解决方案之外,还有一个适用于所有Dabases的解决方案(至少我通过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()
如果“AllColumns”不受SqlCeConnection调用con.GetSchema()
支持以获取支持的属性列表。
有关详细信息,请参阅GetSchema - DbConnection.GetSchema in ADO.NET 2.0 - Retrieve Databases Tables Columns Views etc. from Database Connection和msdn DbConnection.GetSchema()
击>
答案 2 :(得分:-1)
表和列名称必须在引号中:
SELECT COL_LENGTH('docEntry', 'fileName')