【发布时间】:2013-02-21 13:34:14
【问题描述】:
在我的 winform 中,我试图通过传递商品的名称从数据库中获取商品的价格。 用户可以在从数据库中填充项目的组合框中看到项目。 当用户从组合框中选择项目并单击添加时,它将该特定项目添加到数据库中。
在用户添加商品的同时,其中一个文本框添加了价格。如果用户添加五个项目,则文本框显示五个项目价格的总和。到这里一切正常。
现在,当用户想要从列表框中删除项目时,用户选择该项目并单击删除项目,Visual Studio 会抛出错误“索引超出范围”。
我使用相同的代码来获取 add 方法和 substract 方法的价格,但不确定为什么只有 add 方法有效,而 substract 无效
添加价格的代码
public int addPrice()
{
DataSet ds = searchforPrice(comboBox2.Text);
int sum;
bool success = int.TryParse(maskedTextBox10.Text, out sum);
int price = Convert.ToInt32(ds.Tables[0].Rows[0]["Price"]);
return sum + price;
}
减价代码
public int subPrice()
{
DataSet ds = searchforPrice(listBox1.GetItemText(listBox1.SelectedItem));
int sum;
bool success = int.TryParse(maskedTextBox10.Text, out sum);
int price = Convert.ToInt32(ds.Tables[0].Rows[0]["Price"]);
return sum - price;
}
从数据库中获取价格的代码
public DataSet searchforPrice(string itemName)
{
DataSet dataSet = new DataSet();
// Create connection object
OleDbConnection oleConn = new OleDbConnection(connString);
try
{
oleConn.Open();
string sql = "SELECT [Price] FROM [Product] WHERE [Product Name] ='" + itemName + "'";
OleDbDataAdapter dataAdapter = new OleDbDataAdapter(sql, oleConn);
dataAdapter.Fill(dataSet, "Product");
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
finally
{
oleConn.Close();
}
return dataSet;
}
【问题讨论】:
-
在这种情况下,这意味着您的表是空的。帮自己一个忙,看看参数化查询。
-
在代码中放一个断点,看看你在哪里得到了异常。如果您的索引超出范围,这往往意味着您正在访问一个数字大于长度的数组。
-
listBox1.GetItemText(listBox1.SelectedItem) 为 null 不知道为什么
-
注意我认为你的问题是 listBox.GetItemText(listbox.SelectedItem)。为什么不使用它来代替 ListBox1.SelectedValue.ToString();