C# 使用DBNullable类型
代码如下:C# 使用DBNullable类型,c#,asp.net,dbnull,C#,Asp.net,Dbnull,代码如下: protected void btnSearch_Click(object sender, EventArgs e) { List<STATbatter> completelist = new List<STATbatter>(); DALbatter batter = new DALbatter(); batter.NameLast = txtLastName.Text; DataTable batters = DA
protected void btnSearch_Click(object sender, EventArgs e)
{
List<STATbatter> completelist = new List<STATbatter>();
DALbatter batter = new DALbatter();
batter.NameLast = txtLastName.Text;
DataTable batters = DALbatter.getBattersByLastName(batter);
for (int i = 0; i < batters.Rows.Count; i++)
{
DataRow bat = batters.Rows[i];
STATbatter stat = new STATbatter();
stat.PlayerID = bat.Field<String>("playerID");
stat.G = bat.Field<Int32>("G");
stat.Ab = bat.Field<Int32>("AB");
stat.H = bat.Field<Int32>("H");
stat.Bb = bat.Field<Int32>("BB");
stat.Cs = bat.Field<Int32>("CS");
stat.Doub = bat.Field<Int32>("2B");
stat.Trip = bat.Field<Int32>("3B");
stat.Hr = bat.Field<Int32>("HR");
stat.Rbi = bat.Field<Int32>("RBI");
stat.Sb = bat.Field<Int32>("SB");
stat.K = bat.Field<Int32>("SO");
stat.Ibb = bat.Field<Int32>("IBB");
stat.Hbp = bat.Field<Int32>("HBP");
stat.Sh = bat.Field<Int32>("SH");
stat.Sf = bat.Field<Int32>("SF");
stat.Gidp = bat.Field<Int32>("GIDP");
//calculated fields
stat.NameFull = STATbatter.fullName(bat.Field<String>("nameLast"), bat.Field<String>("nameFirst"));
stat.Avg = STATbatter.battingAverage(stat.H, stat.Ab);
stat.Obp = STATbatter.onBasePercentage(stat.Ab, stat.H, stat.Bb, stat.Hbp, stat.Sf);
stat.Slg = STATbatter.slugging(stat.H, stat.Doub, stat.Trip, stat.Hr, stat.Ab);
completelist.Add(stat);
}
gvBatters.DataSource = completelist;
gvBatters.DataBind();
}
protectedvoidbtnsearch\u单击(对象发送方,事件参数e)
{
List completelist=新列表();
DALbatter batter=新的DALbatter();
batter.NameLast=txtLastName.Text;
数据表batters=DALbatter.getBattersByLastName(batter);
for(int i=0;i
问题是:
我在App_数据文件中将一个mdf文件附加到项目中,创建了一个连接字符串以使用本地mdf。它工作得很好。我把这个项目拿到另一台电脑上,在网上:
stat.Cs = bat.Field<Int32>("CS");
stat.Cs=bat.Field(“Cs”);
我明白了
无法将DBNull.Value强制转换为类型“System.Int32”。请使用可为空的类型
不确定为什么这在另一台电脑上可以完美地工作,但无论如何,我怎样才能防止这个错误 数据库中该记录的CS列中的值为空。您可以执行以下两种操作之一:在数据库中填写一个值,或者修改您的
STATbatter
类,并将Cs
字段设置为int?
而不是int
,后者是一个值。数据库中的Cs列可以为null,这样您就不应该使用该读卡器获取int
值。改为使用获取int?
类型。其用途非常相似:
stat.Cs = dr.GetNullableInt32("CS");
哦,伙计,我把它作为一个整数,因为在db中它是一个整数,但是我对它们进行了很多计算,因此需要它们是小数,所以我把它们都改成小数。。。这是第一次测试。谢谢,我可以解决这个问题。当10分钟结束的时候,我会喜欢你的答案。我将考虑在我的项目中使用这个可为空的数据读取器。谢谢。但是,在尝试之后,问题似乎仍然在于我在我的类中将来自db的整数隐式转换为小数,有意义吗?在您显示的代码中,Stat巴特应该充当
bean
,并获得保持其相同类型的数据库相同字段。如果列CS
为float
,请使用GetNullableFloat
填充Stat巴特的stsat.CS
属性。如果它确实是int
,而您在任何其他部分执行了错误的转换,请密切关注它,并创建一个正确的系统。转换或其他任何东西。