C# 异常详细信息:System.FormatException:输入字符串的格式不正确

C# 异常详细信息:System.FormatException:输入字符串的格式不正确,c#,C#,我正在根据另一个dropdownlist填充dropdownlist。。 当我在第一个dropdownlist中选择一个值时,我一直会得到这个错误 有人能给我解释一下吗。。这是密码 using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Configu

我正在根据另一个dropdownlist填充dropdownlist。。 当我在第一个dropdownlist中选择一个值时,我一直会得到这个错误

有人能给我解释一下吗。。这是密码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Configuration;
using System.Data.SqlClient;
using System.Data;

public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        FillCountry();
    }
}
protected void ddlCountry_SelectedIndexChanged(object sender, EventArgs e)
{
    int CountryID = Convert.ToInt32(ddlCountry.SelectedValue.ToString());
    FillStates(CountryID);
    ddlCity.SelectedIndex = 0;
}
protected void ddlState_SelectedIndexChanged(object sender, EventArgs e)
{
    int StateID = Convert.ToInt32(ddlState.SelectedValue.ToString());
    FillCities(StateID);
}

private void FillCountry()
{
    string strConn =      ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
    SqlConnection con = new SqlConnection(strConn);
    SqlCommand cmd = new SqlCommand();
    cmd.Connection = con;
    cmd.CommandType = CommandType.Text;
    cmd.CommandText = "SELECT CountryID, CountryName FROM Country";
    DataSet objDs = new DataSet();
    SqlDataAdapter dAdapter = new SqlDataAdapter();
    dAdapter.SelectCommand = cmd;
    con.Open();
    dAdapter.Fill(objDs);
    con.Close();
    if (objDs.Tables[0].Rows.Count > 0)
    {
        ddlCountry.DataSource = objDs.Tables[0];
        ddlCountry.DataTextField = "CountryName";
        ddlCountry.DataValueField = "CountryID";
        ddlCountry.DataBind();
        ddlCountry.Items.Insert(0, "--Select--");
    }
    else
    {
        lblMsg.Text = "No Countries found";
    }


}

private void FillStates(int countryID)
{
    string strConn = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
    SqlConnection con = new SqlConnection(strConn);
    SqlCommand cmd = new SqlCommand();
    cmd.Connection = con;
    cmd.CommandType = CommandType.Text;
    cmd.CommandText = "SELECT StateID, StateName FROM State WHERE CountryID =@CountryID";
    cmd.Parameters.AddWithValue("@CountryID", countryID);
    DataSet objDs = new DataSet();
    SqlDataAdapter dAdapter = new SqlDataAdapter();
    dAdapter.SelectCommand = cmd;
    con.Open();
    dAdapter.Fill(objDs);
    con.Close();
    if (objDs.Tables[0].Rows.Count > 0)
    {
        ddlState.DataSource = objDs.Tables[0];
        ddlState.DataTextField = "StateName";
        ddlState.DataValueField = "StateID";
        ddlState.DataBind();
        ddlState.Items.Insert(0, "--Select--");
    }
    else
    {
        lblMsg.Text = "No states found";
    }
}

private void FillCities(int stateID)
{
    string strConn = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
    SqlConnection con = new SqlConnection(strConn);
    SqlCommand cmd = new SqlCommand();
    cmd.Connection = con;
    cmd.CommandType = CommandType.Text;
    cmd.CommandText = "SELECT CityID, CityName FROM City WHERE StateID =@StateID";
    cmd.Parameters.AddWithValue("@StateID", stateID);
    DataSet objDs = new DataSet();
    SqlDataAdapter dAdapter = new SqlDataAdapter();
    dAdapter.SelectCommand = cmd;
    con.Open();
    dAdapter.Fill(objDs);
    con.Close();
    if (objDs.Tables[0].Rows.Count > 0)
    {
        ddlCity.DataSource = objDs.Tables[0];
        ddlCity.DataTextField = "CityName";
        ddlCity.DataValueField = "CItyID";
        ddlCity.DataBind();
        ddlCity.Items.Insert(0, "--Select--");
    }
    else
    {
        lblMsg.Text = "No Cities found";
    }
}
}
我想我的问题是这里的线路

int CountryID = Convert.ToInt32(ddlCountry.SelectedValue.ToString());

我正在为我的所有表使用varchar数据类型。

如果ddlCountry.SelectedValue.ToString()的值为非数字或空,则会发生此错误。尝试将其放入Try-catch块。

可能下拉列表值不是整数的字符串表示形式

虽然您可以使用
int.TryParse
或(更糟的是)try/catch块,但想必
SelectedValue
选项是由您而不是用户控制的,因此它们应该对您将要使用它们的任何操作都有效

要做的第一件事可能是在调试器中查看这一点-当您得到一个异常(这会使调试器中断)时,您试图转换的值是什么?一旦你得到了“坏值”,计算出它是如何到达那里的


编辑:如果你有一个值“PRC0001”,那么这显然不是一个整数。如果您在所有表中都使用
varchar
,那么您的CountryID字段可能也是一个
varchar
-那么您为什么要首先尝试转换为整数呢?

so
ddlCountry。SelectedValue
不是有效的
Int32
CountryID列应该是数字谢谢快速回复。。但是你能详细说明一下吗。。我是c#…@DorCohen的新手,但我无法更改我的表CountryID的数据类型。。varchar数据类型是否有其他代码行?问题是,您试图解析一个字符串值,该字符串值应为有效的
Int32
格式,并且您得到该异常,因为它不是有效的格式,即它是字母/字母数字,而不是numeric@user1213269没有示例代码。您必须调试应用程序,并查看您的DropDownList`包含哪些值。如果您在那里看到非数值-这就是您的问题。我已经提到,我正在使用varchar作为CountryID的数据类型。。有没有替代的代码?我们没有问数据类型是什么,我们问的是值是什么!无法将
prc001
转换为整数,因为它包含字母字符。我认为你缺乏一些基本知识,建议你在继续你的问题之前,再进一步阅读一些关于C的知识。看,这家伙也有同样的意图:)