【问题标题】:find variable length for sql server datatype nvarchar from c# code从 C# 代码中查找 sql server 数据类型 nvarchar 的可变长度
【发布时间】:2013-09-07 20:16:26
【问题描述】:

我能否从 asp.net 应用程序中的 c# 代码中找到 sql server 2008 中 nvarchar 类型允许的可变长度?

例如:

nvarchar(?)

我想找到“?”的最大允许数量来自 c# 代码。

【问题讨论】:

    标签: c# asp.net sql sql-server-2008


    【解决方案1】:

    您可以使用此 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 个字符。

    【讨论】:

    • 感谢您的回复。上面的查询会给我“?”的最大允许数量在 sql server 2008 中的 nvarchar(?) 中。例如:据我所知,在 sql server 2005,4000 是 nvarchar 的最大允许数量,即 unicode 和 8000 用于非 unicode。我想找到这个允许的数字,即 4000 或 8000,来自 c# 代码。
    • 非常感谢并感谢您提供这个确切的解决方案。
    • @swarraj:如果你觉得这个答案帮助你解决了你的问题,那么请accept this answer。这将表达您对花费自己的时间帮助您的人们的感激之情。
    【解决方案2】:

    请使用 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);
            }
        }
    

    谢谢。

    【讨论】:

      【解决方案3】:

      您可以使用SqlParameter.Size 属性:

      对于具有可变长度类型(例如 nvarchar)的输出参数,参数的大小定义了保存输出参数的缓冲区的大小。可以将输出参数截断为使用 Size 指定的大小。对于字符类型,使用 Size 指定的大小以字符为单位。

      MSDN Documentation


      如果您的意思是来自数据库字段,您可以使用.GetSchemaTable() 方法从DataReader 对象中获取数据。 ColumnSize 属性包含您需要的信息。

      阅读this article 了解如何操作。

      【讨论】:

        猜你喜欢
        • 2020-03-16
        • 1970-01-01
        • 2013-11-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多