将数据绑定到数据表或gridview时出错

本文关键字:gridview 出错 数据表 数据绑定 | 更新日期: 2023-09-27 18:09:55

将varchar值'DADE'转换为数据类型int时,转换失败。

SQL命令我使用的是:

SELECT * FROM p_details 
WHERE LOWER(name) LIKE '%has%ln%' 
AND  
  CODE = 13 
AND 
  T_CODE='H' 

我的代码是

SqlDataReader drr = com4.ExecuteReader();
DataTable dt = new DataTable();
dt.Load(drr); <--error line
GridView7.DataSource = dt;
GridView7.DataBind();

将数据绑定到数据表或gridview时出错

在评论中,您声明所有列都是varchar,并且您不将任何内容转换为int,但您的sql是WHERE CODE = 13

所以code也是varchar。通过将其与int 13进行比较,您不会将13转换为varchar,反之亦然,您将code中的每个值转换为int

为什么?因为数据类型优先级规则:

  • 优先级较低的数据类型转换为优先级较高的数据类型

int具有更高的优先级,因此所有varchar的值都被转换为int。我假设您在该列中有一个不能转换为int的值'DADA'

所以解决方案很简单,用'13'代替13,使其成为varchar:

SELECT * FROM p_details 
WHERE LOWER(name) LIKE '%has%ln%' 
AND  
  CODE = '13' 
AND 
  T_CODE = 'H' 

除此之外,您应该始终使用sql参数来防止sql注入:

SELECT * FROM p_details 
WHERE LOWER(name) LIKE @lowname
AND  
  CODE = @code 
AND 
  T_CODE = @tCode
com4.Parameters.Add("@lowname", SqlDbType.VarChar).Value = "%" + name.ToLower() + "%");
com4.Parameters.Add("@code", SqlDbType.VarChar).Value = code;
com4.Parameters.Add("@tCode", SqlDbType.VarChar).Value = tCode;