You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET 4.6报错:将varchar值'YES'转换为int类型失败求助

解决GridView更新时"varchar转int失败"的问题

老兄,这个时效性极强的问题我太熟悉了!报错Conversion failed when converting the varchar value 'YES' to data type int的核心原因很明确:你数据库里对应列是int类型,但更新时传过去的是字符串'YES'/'NO',类型不匹配。下面给你几个快速解决的方案,按优先级来:


方案1:修改DropDownList的Value值为数字(最推荐)

直接让DropDownList提交数据库能识别的int值,文本显示YES/NO即可。比如你从数据库取选项数据时,把对应数字(比如1=YES,0=NO)设为DataValueField,文本设为DataTextField:

<EditItemTemplate>
    <asp:DropDownList ID="ddlYesNo" runat="server" 
        DataSourceID="dsYesNoOptions" 
        DataValueField="OptionValue"  <!-- 这里绑定数字1/0 -->
        DataTextField="OptionText">  <!-- 这里绑定YES/NO -->
    </asp:DropDownList>
    <asp:SqlDataSource ID="dsYesNoOptions" runat="server" 
        ConnectionString="<%$ ConnectionStrings:YourDBConn %>" 
        SelectCommand="SELECT OptionValue, OptionText FROM YesNoOptions">
    </asp:SqlDataSource>
</EditItemTemplate>

这样用户看到的是YES/NO,但提交给数据库的是1/0,完美匹配int类型列,从根源解决问题。


方案2:在RowUpdating事件中手动转换值

如果暂时没法改DropDownList的绑定,就在GridView更新前把文本转成数字:

protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
    // 找到编辑行里的DropDownList
    DropDownList ddlYesNo = (DropDownList)GridView1.Rows[e.RowIndex].FindControl("ddlYesNo");
    if (ddlYesNo != null)
    {
        string selectedText = ddlYesNo.SelectedItem.Text;
        // 把YES/NO转成对应的int值
        int dbValue = selectedText.Equals("YES", StringComparison.OrdinalIgnoreCase) ? 1 : 0;
        // 替换更新参数里的值
        e.NewValues["YourTargetColumnName"] = dbValue;
    }
}

记得把YourTargetColumnName换成你数据库里的实际列名。


方案3:检查SqlDataSource的更新参数配置

如果你的SqlDataSource直接绑定了GridView的更新操作,要确保更新参数的类型和数据库列一致:

<asp:SqlDataSource ID="dsGridView" runat="server" 
    ConnectionString="<%$ ConnectionStrings:YourDBConn %>"
    UpdateCommand="UPDATE YourTable SET TargetColumn = @TargetVal WHERE Id = @RowId">
    <UpdateParameters>
        <!-- 这里Type要设为Int32,匹配数据库的int列 -->
        <asp:Parameter Name="TargetVal" Type="Int32" />
        <asp:Parameter Name="RowId" Type="Int32" />
    </UpdateParameters>
</asp:SqlDataSource>

如果之前参数类型设成了String,就会导致字符串转int失败。


先试试方案1,应该最快解决问题!如果还有细节卡壳,随时对照上面的代码调整。

内容的提问来源于stack exchange,提问作者NMeneses

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 06:44:02