取DataTable的Maxlength的几种方法分析

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填充字段.之前不知道可以重叠填充.

 

参考来源:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值