[asp.net]当数据绑定到数据的表或 gridview 时的错误

发布时间: 2017/3/26 3:01:46
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

转换失败时将 varchar 值 '大德' 转换为 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();

解决方法 1:

在你状态的所有列都是评论 varchar 和您不将任何转换为 int,但您的 sql 是 WHERE CODE = 13

所以 code 也是 varchar 。通过比较它与 int 13 你不转换到 13 varchar 但反之亦然,你要转换的每个值 codeint

为什么呢?根据数据类型优先级的规则︰

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

int具有较高的优先级,所以,所有 varchar 值被转换为 int 。我假设您有一个值 'DADA' 在该列不能转换成 int

解决方法很简单,让 varchar 通过使用 '13' 而不是 13 :

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;
官方微信
官方QQ群
31647020