Asp.net 错误:Linq中的用户代码未处理FormatException如何解决?
请看下面的代码:FormatException未被用户代码处理 代码:Asp.net 错误:Linq中的用户代码未处理FormatException如何解决?,asp.net,visual-studio-2008,linq,entity-framework,c#-3.0,Asp.net,Visual Studio 2008,Linq,Entity Framework,C# 3.0,请看下面的代码:FormatException未被用户代码处理 代码: satis.KDV = Decimal.Parse((from o in genSatisctx.Urun where o.ID == UrunID select o.Kdv).ToString()); 如何重写linq查询?您正在对查询而不是单个结果调用ToString。即使您可能只期望一个值与查询匹配,但它不会只返回一个值。您必须指示它使用或其变体来执行此操作,这些变体也会返回默认值(,) 为了避免异常,如果LINQ查
satis.KDV = Decimal.Parse((from o in genSatisctx.Urun where o.ID == UrunID select o.Kdv).ToString());
如何重写linq查询?您正在对查询而不是单个结果调用
ToString
。即使您可能只期望一个值与查询匹配,但它不会只返回一个值。您必须指示它使用或其变体来执行此操作,这些变体也会返回默认值(,)
为了避免异常,如果LINQ查询返回无法正确解析的内容,可以将其更改为使用,也可以将代码更改为使用默认值。我推荐前者或两者结合
请注意,在下面的示例中,我已将调用添加到。这确保了即使没有找到值,也只解析一个值,并且如果有多个结果,我们会得到一个异常(即,它强制我们在查询中得到零个或一个结果)
您正在对查询而不是单个结果调用
ToString
。即使您可能只期望一个值与查询匹配,但它不会只返回一个值。您必须指示它使用或其变体来执行此操作,这些变体也会返回默认值(,)
为了避免异常,如果LINQ查询返回无法正确解析的内容,可以将其更改为使用,也可以将代码更改为使用默认值。我推荐前者或两者结合
请注意,在下面的示例中,我已将调用添加到。这确保了即使没有找到值,也只解析一个值,并且如果有多个结果,我们会得到一个异常(即,它强制我们在查询中得到零个或一个结果)
您正在
IQueryable
上调用ToString()
-您希望字符串是什么?它不太可能是任何可以解析为十进制数的东西
我的猜测是您想调用First()
或Single()
,但如果没有更多信息,我们真的无法确定。什么类型的o.Kdv
我想你要么想要:
satis.KDV = (from o in genSatisctx.Urun
where o.ID == UrunID
select o.Kdv).First();
或
您正在
IQueryable
上调用ToString()
-您希望字符串是什么?它不太可能是任何可以解析为十进制数的东西
我的猜测是您想调用First()
或Single()
,但如果没有更多信息,我们真的无法确定。什么类型的o.Kdv
我想你要么想要:
satis.KDV = (from o in genSatisctx.Urun
where o.ID == UrunID
select o.Kdv).First();
或
当我使用调试模式时,我看到数据在鼠标上方更新,在该方法结束后(显示此消息[输入字符串格式不正确]
/* protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
try
{
TextBox name = (TextBox)GridView1.Rows[e.RowIndex].FindControl("txtEditName");
SqlDataSource2.UpdateParameters["Name"].DefaultValue = name.ToString();
TextBox age = (TextBox)GridView1.Rows[e.RowIndex].FindControl("txtEditAge");
SqlDataSource2.UpdateParameters["Age"].DefaultValue = age.ToString();
TextBox birthday = (TextBox)GridView1.Rows[e.RowIndex].FindControl("txtEditBirthday");
SqlDataSource2.UpdateParameters["Birthday"].DefaultValue = birthday.ToString();
DropDownList country = (DropDownList)GridView1.Rows[e.RowIndex].FindControl("DropEditCountry");
SqlDataSource2.UpdateParameters["CountryID"].DefaultValue = country.SelectedValue;
TextBox mobile = (TextBox)GridView1.Rows[e.RowIndex].FindControl("txtEditMobile");
SqlDataSource2.UpdateParameters["Mobile_No"].DefaultValue = mobile.ToString();
SqlDataSource2.Update();
}
catch (Exception j)
{
j.Message.ToString();
}
}
/* }
当我使用调试模式时,我看到数据在鼠标上方更新,在该方法结束后(显示此消息[输入字符串格式不正确]
/* protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
try
{
TextBox name = (TextBox)GridView1.Rows[e.RowIndex].FindControl("txtEditName");
SqlDataSource2.UpdateParameters["Name"].DefaultValue = name.ToString();
TextBox age = (TextBox)GridView1.Rows[e.RowIndex].FindControl("txtEditAge");
SqlDataSource2.UpdateParameters["Age"].DefaultValue = age.ToString();
TextBox birthday = (TextBox)GridView1.Rows[e.RowIndex].FindControl("txtEditBirthday");
SqlDataSource2.UpdateParameters["Birthday"].DefaultValue = birthday.ToString();
DropDownList country = (DropDownList)GridView1.Rows[e.RowIndex].FindControl("DropEditCountry");
SqlDataSource2.UpdateParameters["CountryID"].DefaultValue = country.SelectedValue;
TextBox mobile = (TextBox)GridView1.Rows[e.RowIndex].FindControl("txtEditMobile");
SqlDataSource2.UpdateParameters["Mobile_No"].DefaultValue = mobile.ToString();
SqlDataSource2.Update();
}
catch (Exception j)
{
j.Message.ToString();
}
}
/* }
如果没有找到值,这将在ToString调用上抛出NullPointerException。@Jon:这不取决于
o.Kdv
是什么吗?如果是十进制或其他数字,不是默认值就是0吗?如果没有找到值,这将在ToString调用上抛出NullPointerException。@Jon:这不取决于o.Kdv
是什么吗?如果我是十进制或其他数字,不是默认值就是0吗?你需要修改你的格式,否则你将被否决,你将得不到任何答案。你需要修改你的格式,否则你将被否决,你将得不到任何答案。