0

データベースにデータを挿入しようとしています

しかし、ボタンを押すと、エラーメッセージが表示されます

パラメータ値を文字列から Int32 に変換できませんでした。

私は助けが必要です

もうどうしたらいいのかわからない。ありがとう!!

private void InsertNewRecord()
            {
                SqlCommand cmdInsert = new SqlCommand();
                cmdInsert.Connection = cn;
                cmdInsert.CommandType = CommandType.Text;
                cmdInsert.CommandText = "INSERT INTO Customers (" +
                    " LastName, FirstName, MiddleName, ContactNumber, EmailAddress, BirthDate, CompanyName, Address, BillingAddress, CustomerStatus, CustPicture" +
                    ") VALUES (" +
                    " @LastName, @FirstName, @MiddleName, @ContactNumber, @EmailAddress, @BirthDate, @CompanyName, @Address, @BillingAddress, @CustomerStatus, @CustPicture" +
                    ") ";
                cmdInsert.Parameters.Add("@LastName", SqlDbType.VarChar, 50).Value = txtLastName.Text;
                cmdInsert.Parameters.Add("@FirstName", SqlDbType.VarChar, 50).Value = txtFirstName.Text;
                cmdInsert.Parameters.Add("@MiddleName", SqlDbType.VarChar, 50).Value = txtMiddleName.Text;
                cmdInsert.Parameters.Add("@ContactNumber", SqlDbType.Int).Value = txtContactNumber.Text;
                cmdInsert.Parameters.Add("@EmailAddress", SqlDbType.VarChar, 100).Value = txtEmailAddress.Text;
                cmdInsert.Parameters.Add("@BirthDate", SqlDbType.Date).Value = dtpBirthdate.Value;
                cmdInsert.Parameters.Add("@CompanyName", SqlDbType.VarChar, 50).Value = txtCompanyName.Text;
                cmdInsert.Parameters.Add("@Address", SqlDbType.VarChar, 100).Value = txtAddress.Text;
                cmdInsert.Parameters.Add("@BillingAddress", SqlDbType.VarChar, 100).Value = txtBillingAddress.Text;
                cmdInsert.Parameters.Add("@CustomerStatus", SqlDbType.VarChar, 10).Value = cboCustomerStatus.Text;


                Image bmp;
                System.IO.MemoryStream ms;

                if (PicImage.Image == null)
                {
                    bmp = Bitmap.FromFile(Application.StartupPath + @"\Anonymous.jpg"); //read the default picture
                    ms = new System.IO.MemoryStream();
                    bmp.Save(ms, System.Drawing.Imaging.ImageFormat.Bmp); //put it in the memory stream
                    cmdInsert.Parameters.Add("@CustPicture", SqlDbType.Image).Value = ms.GetBuffer(); //add it as the value of custpictureparameter.
                }
                else
                {
                    bmp = Bitmap.FromFile(openFileDialog1.FileName);
                    ms = new System.IO.MemoryStream();
                    bmp.Save(ms, System.Drawing.Imaging.ImageFormat.Bmp);
                    cmdInsert.Parameters.Add("@CustPicture", SqlDbType.Image).Value = ms.GetBuffer();
                }
                cmdInsert.ExecuteNonQuery();
                Console.WriteLine("Successfully added row to Customers table!");

            } //end of InsertNewRecord()

}

4

3 に答える 3

3

エラーがどこにあるかを示すコードをステップ実行しなくても、この行でほぼ保証できます。

cmdInsert.Parameters.Add("@ContactNumber", SqlDbType.Int).Value = txtContactNumber.Text;

パラメータは整数で、文字列を渡していると言っています。txtContactNumber.Textの値を整数に変換する必要があります。

int.Parseまたはできれば試してみてくださいint.TryParse

于 2013-06-17T08:53:04.250 に答える
0

他の答えは間違っています。値が正しくフォーマットされている場合、パラメーターは自動的に変換されます。

MSDNから:

アプリケーションがデータベースの型を指定している場合、プロバイダーがデータをサーバーに送信するときに、バインドされた値がその型に変換されます。IConvertible インターフェイスをサポートしている場合、プロバイダーは任意の型の値を変換しようとします。指定された型が値と互換性がない場合、変換エラーが発生する可能性があります。

したがって、テキスト ボックスに空白が含まれていないことを確認してください。

cmdInsert.Parameters.Add("@ContactNumber", SqlDbType.Int).Value = txtContactNumber.Text.Trim();
于 2013-06-17T09:39:05.230 に答える