将数据绑定到数据表或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();
在评论中,您声明所有列都是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;