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.SelectedValueVisual Studio 内では short にキャストする必要があるとのことですが、Access 内では long integer を使用しているため、から来ている可能性があると思います。なぜそうなのかはわかりません。誰かが私が間違っていることを教えてもらえますか?

4

1 に答える 1

8

あなたの推測はほぼ確実に正しいです。

ボックス化された値の型は、実際の型にのみボックス化を解除できます。そこに がある場合は、直接longアンボックスすることはできませんshort?long最初に(またはlong?)にボックス化解除してから、 に変換する必要がありshort?ます。

これはよくある質問です。詳細な説明については、この件に関する私の記事を参照してください。

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

于 2013-02-04T18:37:19.520 に答える