1

我有这个问题,我在 Visual Studio 内的错误列表中收到“指定的演员表无效”没有错误。这个错误会来自我的 Access 数据库吗?

private void Submit_Click(object sender, EventArgs e)
{
    String desItem = desWork.Text;
    decimal partscost = Convert.ToDecimal(textBoxPartsCost.Text);
    decimal laborhours = Convert.ToDecimal(textBoxHours.Text);
    decimal laborrate = Convert.ToDecimal(textBoxRate.Text);
    decimal total = laborhours * laborrate + partscost;

    try
    {
        servicesTableAdapter.InsertServices((short?)comboBoxCustomer.SelectedValue, (DateTime?)dateTimePickerServiceDate.Value, desItem, partscost, laborhours, laborrate, total);
        MessageBox.Show("Services Inserted", "Succes!", MessageBoxButtons.OK, MessageBoxIcon.Information);
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
    }
}

我认为它可能来自(short?)comboBoxCustomer.SelectedValue因为在 Visual Studio 内部它告诉我我需要转换为一个短整数,但在 Access 内部我使用的是长整数。不知道为什么会这样。有人可以让我知道我做错了什么吗?

4

1 回答 1

8

你的猜想几乎肯定是正确的。

装箱的值类型只能拆箱为它实际的类型。如果你有一个long,你不能short?直接拆箱。您必须先将其拆箱为long(或long?),然后将其转换为short?.

这是一个非常常见的问题。有关详细说明,请参阅我关于该主题的文章。

http://ericlippert.com/2009/03/03/representation-and-identity/

于 2013-02-04T18:37:19.520 回答