C# 使用C检索SQL Server中具有varchar数据类型的字段的大小
我正在ASP.NET中使用VS 2010和SQL Server 2008创建一个项目 我想检索具有varchar数据类型的列的大小 e、 gC# 使用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
我希望使用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'