1.对比取字段最大长度
public int GetMaxLength()
{
int maxlength=0;
foreach(DataRow dr in dt.Rows)
{
if(dr["列名"].ToString().Length >max)
{
max=dr["列名"].ToString().Length;
}
}
return maxlength;
}
此方法影响执行效率,记录多的情况下非常不划算.
2.利用DataColumn的Expression属性而不循环行取列的最大长度的方法.
public int GetMaxLength()
{
DataTable dt = …… //自已取的DataTable
DataColumn maxLengthColumn = new DataColumn();
maxLengthColumn.ColumnName = "MaxLength";
maxLengthColumn.Expression = "len(convert(列名,'System.String'))";
dt.Columns.Add(maxLengthColumn);
object maxLength = dt.Compute("max(MaxLength)", "true");
dt.Columns.Remove(maxLengthColumn);
return Convert.ToInt32(maxLength)
}
3.csdn上的方法
此处以表dt2中的keyIndex列(int类型)为例
(1、通过linq来实现
[csharp] view plain copy
int maxKeyIndex = dt2.AsEnumerable().Select(t => t.Field<int>("keyIndex")).Max();
Linq语法:点击打开链接
(2、通过Compute方法来实现
[csharp] view plain copy
int ee = (int)dt2.Compute("Max(keyIndex)", "true");
Compute方法:点击打开链接
(3、通过Select方法来实现
[csharp] view plain copy
int rr = (int)dt2.Select("", "keyIndex DESC")[0]["keyIndex"];
Select方法:点击打开链接
(4、转List
将DataTable中需要排序的列转List,然后通过list的Sort()方法来排序,默认值升序的即排序完成后,list中的最后一个是最大值。
List简介
以上几种方式只是从记录行中取出最大长度,如记录为空,则异常报错.
4.用SqlDataAdapter填充DataTable的时候加上FillSchema
using (SqlConnection conn = new SqlConnection("连接字符串"))
{
SqlCommand cmd = new SqlCommand("select * from Users", conn);
conn.Open();
SqlDataAdapter sda = new SqlDataAdapter(cmd);
DataTable dt = new DataTable();
<span style="white-space:pre"> </span><span style="line-height: 22.4px; font-family: Arial;">sda.Fill(dt); //先用Fill方法填充记录</span><span style="white-space:pre">
</span> sda.FillSchema(dt, SchemaType.Mapped);//这里用FillSchema方法
conn.Close();
Console.WriteLine(dt.Columns[1].MaxLength);//这里就可以获取列的长度了
}
此方式效果非常好,而且AllowDBNull也有效,不过int类型的长度为-1
先用Fill填充记录,再用FillSchema填充字段.之前不知道可以重叠填充.
参考来源: