【发布时间】:2013-09-07 20:16:26
【问题描述】:
我能否从 asp.net 应用程序中的 c# 代码中找到 sql server 2008 中 nvarchar 类型允许的可变长度?
例如:
nvarchar(?)
我想找到“?”的最大允许数量来自 c# 代码。
【问题讨论】:
标签: c# asp.net sql sql-server-2008
我能否从 asp.net 应用程序中的 c# 代码中找到 sql server 2008 中 nvarchar 类型允许的可变长度?
例如:
nvarchar(?)
我想找到“?”的最大允许数量来自 c# 代码。
【问题讨论】:
标签: c# asp.net sql sql-server-2008
您可以使用此 T-SQL 查询来查看系统目录视图:
SELECT
[max_length]
FROM sys.columns
WHERE [object_id] = OBJECT_ID('YourTableNameHere')
AND name = 'YourColumnNameHere'
这将为您的列返回存储的、定义的最大长度(以字符为单位)
更新:如果您想找出一个类型(不是您的任何表的列)的最大长度,您可以改用这个查询:
SELECT
name, max_length
FROM sys.types
WHERE name IN ('varchar', 'nvarchar')
注意:这会返回最大长度以字节为单位(不是字符!),因此这两种类型都为 8000。对于varchar,8000 字节相当于 8000 个字符,而对于nvarchar,8000 字节相当于 4000 个字符。
【讨论】:
请使用 TableSchema 方法获取列的所有详细信息。
SqlDataReader reader=command.ExecuteReader();
using (var schemaTable = reader.GetSchemaTable())
{
foreach (DataRow row in schemaTable.Rows)
{
string ColumnName= row.Field<string>("ColumnName");
string DataTypeName= row.Field<string>("DataTypeName");
short NumericPrecision= row.Field<short>("NumericPrecision");
short NumericScale= row.Field<short>("NumericScale");
int ColumnSize= row.Field<int>("ColumnSize");
Console.WriteLine("Column: {0} Type: {1} Precision: {2} Scale: {3} ColumnSize {4}",
ColumnName, DataTypeName, NumericPrecision, scale,ColumnSize);
}
}
谢谢。
【讨论】:
您可以使用SqlParameter 的.Size 属性:
对于具有可变长度类型(例如 nvarchar)的输出参数,参数的大小定义了保存输出参数的缓冲区的大小。可以将输出参数截断为使用 Size 指定的大小。对于字符类型,使用 Size 指定的大小以字符为单位。
如果您的意思是来自数据库字段,您可以使用.GetSchemaTable() 方法从DataReader 对象中获取数据。 ColumnSize 属性包含您需要的信息。
阅读this article 了解如何操作。
【讨论】: