将 DropDownList SelectedValue 传递给 SQL 查询抛出输入字符串的格式不正确
Passing DropDownList SelectedValue to SQL Query throws Input String was not in a Correct Format
我正在开发一个 ASP.NET 网络表单页面,该页面在数据库中查询研究 table 中的条目列表。这些条目将被传递到下拉列表中。当从下拉列表中选择一项研究时,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_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();
}
}
如何解决将下拉列表的数据源分配给 LoadStudies 方法时抛出的错误?
ddlStudies.SelectedValue
不是有效的整数值 0
、1
、2
等
我敢打赌这是一个空字符串。 Convert.ToInt32("")
,这将引发您遇到的异常。
有趣的是 Convert.ToInt32(null)
将 return 为零。
Try
Convert.ToInt32(string.IsNullOrWhiteSpace(ddlStudies.SelectedValue) ? null : ddlStudies.SelectedValue)
我正在开发一个 ASP.NET 网络表单页面,该页面在数据库中查询研究 table 中的条目列表。这些条目将被传递到下拉列表中。当从下拉列表中选择一项研究时,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_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();
}
}
如何解决将下拉列表的数据源分配给 LoadStudies 方法时抛出的错误?
ddlStudies.SelectedValue
不是有效的整数值 0
、1
、2
等
我敢打赌这是一个空字符串。 Convert.ToInt32("")
,这将引发您遇到的异常。
有趣的是 Convert.ToInt32(null)
将 return 为零。
Try
Convert.ToInt32(string.IsNullOrWhiteSpace(ddlStudies.SelectedValue) ? null : ddlStudies.SelectedValue)