代码之家  ›  专栏  ›  技术社区  ›  SidC

将DropDownList SelectedValue传递给SQL查询抛出输入字符串的格式不正确

  •  0
  • SidC  · 技术社区  · 7 年前

    我正在开发ASP。NET webforms页,用于查询数据库以获取研究表中的条目列表。这些条目将被传递到dropdownlist中。从dropdownlist中选择研究时,studyID将传递给GetResponses方法,以从存储过程中检索相关数据。

    我收到 Input String was not in a Correct Format 使用以下代码段:

     private DataTable LoadStudies(int iStudyID )
    {
        ddlStudies.Items.Clear();
        ddlStudies.SelectedValue = "0";
    
        DataTable dt = new DataTable();
        using (PROTOTYPING db = new PROTOTYPING(ConfigurationManager.ConnectionStrings["SQL"].ConnectionString))
        {
            var query = (from d in db.Studies
                where d.StudyStatus == 0 //Closed...
                orderby d.StudyName
                select new
                {
                    d.StudyName,
                    d.StudyID,
                });
            if (query.Count() > 0)
            {
                foreach (var a in query)
                {
                    ddlStudies.Items.Add(new ListItem(a.StudyID.ToString()));
                }
            }
    
            dt.Dispose();
            DataView dv = new DataView(dt);
            return dt;
        }
    }
    

    在当前写入的Page\u Load上引发错误,如下所示:

    protected void Page_Load(object sender, EventArgs e)
    {
        int iUserID = 0;
    
        if (Session["UserID"] == null)
        {
            Response.Redirect("Default.aspx");
        }
        iUserID = Convert.ToInt32(Session["UserID"]);
        int iRole = 0;
        iRole = Convert.ToInt32(Session["RoleID"]);
    
        if (!Page.IsPostBack)
        {
    
            LoadStudies(Convert.ToInt32(ddlStudies.SelectedValue));
            GetResponses(Convert.ToInt32(ddlStudies.SelectedValue));
    
            ddlStudies.DataSource = LoadStudies(Convert.ToInt32(ddlStudies.SelectedValue));
            ddlStudies.DataTextField = "StudyName";
            ddlStudies.DataValueField = "StudyID";
            ddlStudies.DataBind();
        }
    }
    

    如何解决将dropdownlist的数据源分配给LoadStudies方法时引发的错误?

    1 回复  |  直到 7 年前
        1
  •  1
  •   Jim    7 年前

    ddlStudies.SelectedValue 不是有效的整数值 0 , 1 , 2

    我敢打赌这是一根空弦。 Convert.ToInt32("") ,这将引发您遇到的异常。

    有趣的是 Convert.ToInt32(null) 将返回零。

    尝试 Convert.ToInt32(string.IsNullOrWhiteSpace(ddlStudies.SelectedValue) ? null : ddlStudies.SelectedValue)