【发布时间】:2016-10-18 08:22:53
【问题描述】:
我正在尝试从 2010 Access 数据库中提取数据。这应该是提取供应商编号。
虽然我收到“用户代码未处理无效的 CastException。指定的强制转换无效。”当我尝试构建项目时。我已经在我的数据库中仔细检查了我的列 VNNO,它被设置为一个整数。我一定错过了一些简单的东西。
public SelectList GetVendors(String selected = "")
{
IList<SelectListItem> vendors = new List<SelectListItem>();
vendors.Add(new SelectListItem { Text = "", Value = "- Select Vendor -" });
vendors.Add(new SelectListItem { Text = "TO BE ASSIGNED", Value = "TO BE ASSIGNED" });
using (OleDbConnection myConnection = new OleDbConnection(ConfigurationManager.ConnectionStrings["VendorConnection"].ConnectionString))
{
myConnection.Open();
using (OleDbCommand command = new OleDbCommand())
{
command.CommandText = "SELECT * FROM [MY PPUR301] ORDER BY [VNNO] ASC";
command.Connection = myConnection;
command.Prepare();
using (OleDbDataReader reader = command.ExecuteReader())
{
while (reader.Read())
{
string text = "";
string value = "";
if (!reader.IsDBNull(reader.GetOrdinal("VNNO")))
{
text = reader.GetInt32(reader.GetOrdinal("VNNO")).ToString();
}
if (!reader.IsDBNull(reader.GetOrdinal("VNNO")))
{
value = reader.GetInt32(reader.GetOrdinal("VNNO")).ToString();
}
vendors.Add(new SelectListItem { Text = text.ToUpper(), Value = value.ToUpper() });
}
}
}
}
return new SelectList(vendors, "Text", "Value", selected);
}
这是另一段完美运行的代码。它会提取供应商的实际名称。
public SelectList GetVendors(String selected = "")
{
IList<SelectListItem> vendors = new List<SelectListItem>();
vendors.Add(new SelectListItem { Text = "", Value = "- Select Vendor -" });
vendors.Add(new SelectListItem { Text = "TO BE ASSIGNED", Value = "TO BE ASSIGNED" });
using (OleDbConnection myConnection = new OleDbConnection(ConfigurationManager.ConnectionStrings["VendorConnection"].ConnectionString))
{
myConnection.Open();
using (OleDbCommand command = new OleDbCommand())
{
command.CommandText = "SELECT * FROM [MY PPUR301] ORDER BY [VNNAME] ASC";
command.Connection = myConnection;
command.Prepare();
using (OleDbDataReader reader = command.ExecuteReader())
{
while (reader.Read())
{
string text = "";
string value = "";
if (!reader.IsDBNull(reader.GetOrdinal("VNNAME")))
{
text = reader.GetString(reader.GetOrdinal("VNNAME")).ToString().Trim();
}
if (!reader.IsDBNull(reader.GetOrdinal("VNNAME")))
{
value = reader.GetString(reader.GetOrdinal("VNNAME")).ToString().Trim();
}
vendors.Add(new SelectListItem { Text = text.ToUpper(), Value = value.ToUpper() });
}
}
}
}
return new SelectList(vendors, "Text", "Value", selected);
}
【问题讨论】:
-
你的数据集中的最大整数是多少?你可能需要 Int64 吗?
-
@Zachary 我认为它必须是
text = (reader.GetInt32(reader.GetOrdinal("VNNO"))).ToString(); -
@devlincarnate 也测试了 Int64。我相信最大值在 8000 左右
-
你重复 VNNAME 两次。
-
究竟是哪一行引发了错误?
标签: c# ms-access-2010