Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用C检索SQL Server中具有varchar数据类型的字段的大小_C#_Sql_Sql Server 2008 - Fatal编程技术网

C# 使用C检索SQL Server中具有varchar数据类型的字段的大小

C# 使用C检索SQL Server中具有varchar数据类型的字段的大小,c#,sql,sql-server-2008,C#,Sql,Sql Server 2008,我正在ASP.NET中使用VS 2010和SQL Server 2008创建一个项目 我想检索具有varchar数据类型的列的大小 e、 g 我希望使用c代码得到20,而不是varchar的最大可能大小 根据您所使用的数据框架,可能有一种更简单的支持方法来实现这一点,但只需直接转到SQL获取答案,您就可以从sys表中获得这些值 查询的一个示例是: select t.name as tableName, c.name as columnName, c.max_length from sys.col

我正在ASP.NET中使用VS 2010和SQL Server 2008创建一个项目

我想检索具有varchar数据类型的列的大小

e、 g


我希望使用c代码得到20,而不是varchar的最大可能大小

根据您所使用的数据框架,可能有一种更简单的支持方法来实现这一点,但只需直接转到SQL获取答案,您就可以从sys表中获得这些值

查询的一个示例是:

select t.name as tableName, c.name as columnName, c.max_length
from sys.columns c
join sys.tables t on c.object_id=t.object_id

请注意,长度是字节数。对于varchar,这将对应于字符。对于其他数据类型,这有不同的含义。例如,nvarchar将每个字符存储在2个字节中,因此告诉您两倍的数字。

信息\u schema.columns表提供了信息 试一试

试试这个:

public int GetColumnMaxLength(string tableName, string columnName)
{
    string query = @"SELECT max_length
                     FROM sys.columns c 
                     INNER JOIN sys.tables t ON t.object_id = c.object_id
                     WHERE t.Name = @TableName
                     AND c.Name = @ColumnName";

    int result = -1;

    using (SqlConnection conn = new SqlConnection("your-connection-string-here"))
    using (SqlCommand cmd = new SqlCommand(query, conn))
    {
        cmd.Parameters.Add("@TableName", SqlDbType.VarChar, 100).Value = tableName;
        cmd.Parameters.Add("@ColumnName", SqlDbType.VarChar, 100).Value = columnName;

        conn.Open();
        result = (int)cmd.ExecuteScalar();
        conn.Close();
    }

    return result;
}

下面是另一种方法:

using(var conn = new SqlConnection("ConnectionString"))
{
    conn.Open();
    var cmd = new SqlCommand("SELECT * FROM Table WHERE 1 = 0", conn);
    var reader = cmd.ExecuteReader();
    var schema = reader.GetSchemaTable();
    var size = schema.AsEnumerable()
                     .Single(s => s.Field<string>("ColumnName") == "Column")
                     .Field<int>("ColumnSize");
    conn.Close();
}
只需将ConnectionString、Table和Column替换为您自己的值即可

SELECT CHARACTER_MAXIMUM_LENGTH
FROM INFORMATION_SCHEMA.COLUMNS
WHERE table_name = 'YOUR_TABLE_NAME'
using(var conn = new SqlConnection("ConnectionString"))
{
    conn.Open();
    var cmd = new SqlCommand("SELECT * FROM Table WHERE 1 = 0", conn);
    var reader = cmd.ExecuteReader();
    var schema = reader.GetSchemaTable();
    var size = schema.AsEnumerable()
                     .Single(s => s.Field<string>("ColumnName") == "Column")
                     .Field<int>("ColumnSize");
    conn.Close();
}
SELECT CHARACTER_MAXIMUM_LENGTH
FROM INFORMATION_SCHEMA.COLUMNS
WHERE table_name = 'YOUR_TABLE_NAME'