-3

コンボボックスに、int と主キーであるデータベース列を入力したいと考えています。

 private void cmbxIDno_SelectedIndexChanged(object sender, EventArgs e)
    {
        ResetTextBoxes();

        SqlCommand SelectedID = new SqlCommand();
        SelectedID.Connection = clsINIReader.nConn;

        SelectedID.CommandText = "SELECT * FROM tools  WHERE ID= '" + cmbxIDno.SelectedItem.ToString()+ "' ";


        SqlDataReader drID = SelectedID.ExecuteReader();

        while (drID.Read())   //Conversion failed when converting the varchar value 'Select ID No...' to data type int.
        {
            txtPN.Text = drID["PartNumber"].ToString();
            txtNomenclature.Text = drID["Nomenclature"].ToString();
            txtSerial.Text = drID["SerialNo"].ToString();
            txtShelfNo.Text = drID["ShelfNumber"].ToString();
            txtTSnumber.Text = drID["TSnumber"].ToString();
            txtBinNumber.Text = drID["BinNumber"].ToString();
            txtRentalPrize.Text = drID["RentalPrize"].ToString();
            txtCurrency.Text = drID["Currency"].ToString();
            txtQuantity.Text = drID["Quantity"].ToString();
            txtCalibrDateInfo.Text = drID["CalibrationDate"].ToString().Replace("00:00:00", "");
            txtCalibrationPeriod.Text = drID["CalibrationPeriod"].ToString();
            txtCertfNumber.Text = drID["CertificateNo"].ToString();
            textBox11.Text = drID["CertificationPath"].ToString();
            txtIDno.Text = drID["ID"].ToString();
        }
        drID.Close();
    }

しかし、私はこのエラーが発生します:

varchar 値 'Select ID No...' をデータ型 int に変換するときに変換に失敗しました

4

5 に答える 5

1

あなたの問題に関する詳細情報がなければ、私は推測していますが、最も可能性の高い問題は、コンボボックスにあなたが持っていると思うものがあることです。

簡単なステップスルー デバッグ セッションでこれを十分に確認できますが、私の推測では、コンボ ボックスSelectedItemの値には「SELECT Id FROM ...」のようなものが含まれており、実際の整数は含まれていません。たとえば、コンボ ボックスに ID 値を誤って入力しようとして、まったく異なる値が得られた可能性があります。

SelectedID.CommandTextそれが本当なら、設定した直後にの値を調べると、次のように表示されていることがわかります。

SELECT * FROM tools  WHERE ID= 'SELECT Id FROM ...'

ID値が実際に整数であると仮定すると(その場合、引用符を付ける理由はわかりません)、「SELECT Id FROM ...」が整数ではないというエラーが表示されます。

そこから、コンボボックスに間違ったデータが含まれている理由を理解する必要があります...


余談ですが:

このステップスルー デバッグ プロセスをまだ実行していない場合は、ここで質問するずっと前に、これが最初のステップであったはずです。それは、多くの反対票を投じるに値する可能性が高く、多くの良い答えではないようなものです.

持っている場合は、他の人が私と同じ結論に飛びついて、あなたの質問に答える価値がないと判断しないように、質問に含めるのに役立つ情報です。

于 2013-09-22T14:57:55.487 に答える
0

ここで、テーブル内のフィールドの 1 つが INT として宣言され、null 許容であるという同じ問題に遭遇したと思います。レコードの 1 つでこの int 値が null に設定されている場合、while(reader.read()) は次の例外を発生させます。

私はまだこれを処理する適切な方法を考え出すことに取り組んでいます.

于 2013-10-03T16:04:35.620 に答える
0

次のようなものを試してください

if(cmbxIDno.SelectedItem!=null)
{
    SelectedID.CommandText = "SELECT * FROM tools  WHERE ID= '" +  Int32.Parse(cmbxIDno.SelectedItem.ToString())+ "' ";
}
于 2013-10-03T16:16:11.773 に答える