Im essayant d'insert des données dans ma database en utilisant C # lang et l'afficher avec DataGridView sur un Windows Form.Mais il me donne cette erreur spécifique:
La conversion a échoué lors de la conversion de la valeur varchar '@uye_yasi' en type de données int
Im sûr que j'ai écrit correctement tous les noms de colonne. Il y a une exception et son ID. Sa key primaire, pas Null et Auto Increment.
Chaîne de connection
SqlConnection baglan = new SqlConnection(@"Data Source=CASPER\SQLEXPRESS;Initial Catalog=kutuphane;Integrated Security=True");
La méthode de listage à afficher sur DataGridView; (fonctionne sans aucun problème)
public void listle() { DataSet ds1 = new DataSet(); baglan.Open(); SqlDataAdapter da = new SqlDataAdapter("select * from uyeler",baglan); da.Fill(ds1); dataGridView1.DataSource = ds1.Tables[0]; baglan.Close(); }
Codes sur l'événement form_load
private void Form3_Load(object sender, EventArgs e) { listle(); dataGridView1.Columns[0].HeaderText = "ID"; dataGridView1.Columns[1].HeaderText = "Adı"; dataGridView1.Columns[2].HeaderText = "Soyadı"; dataGridView1.Columns[3].HeaderText = "Yaşı"; dataGridView1.Columns[4].HeaderText = "Adresi"; dataGridView1.Columns[5].HeaderText = "Telefonu"; dataGridView1.Columns[6].HeaderText = "Mail Adresi"; }
Codes dans l'événement CellContentClick pour DataGridView
private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e) { int satir = dataGridView1.CurrentRow.Index; textAd.Text = dataGridView1.Rows[satir].Cells["uye_adi"].Value.ToSsortingng(); textSoyad.Text = dataGridView1.Rows[satir].Cells["uye_soyadi"].Value.ToSsortingng(); textYas.Text = dataGridView1.Rows[satir].Cells["uye_yasi"].Value.ToSsortingng(); textAdres.Text = dataGridView1.Rows[satir].Cells["uye_adresi"].Value.ToSsortingng(); textTelefon.Text = dataGridView1.Rows[satir].Cells["uye_telefonu"].Value.ToSsortingng(); textMail.Text = dataGridView1.Rows[satir].Cells["uye_mailadresi"].Value.ToSsortingng(); }
Codes sur l'événement onclick pour le button Insérer
private void btnEkle_Click(object sender, EventArgs e) { baglan.Open(); SqlCommand cmd = new SqlCommand("INSERT INTO uyeler (uye_adi,uye_soyadi,uye_yasi,uye_adresi,uye_telefonu,uye_mailadresi) values ('@uye_adi','@uye_soyadi','@uye_yasi','@uye_adresi','@uye_telefonu','@uye_mailadresi')",baglan); cmd.Connection = baglan; cmd.Parameters.AddWithValue("@uye_adi",textAd.Text); cmd.Parameters.AddWithValue("@uye_soyadi",textSoyad.Text); cmd.Parameters.AddWithValue("@uye_yasi",textYas.Text); cmd.Parameters.AddWithValue("@uye_adresi",textAdres.Text); cmd.Parameters.AddWithValue("@uye_telefonu",textTelefon.Text); cmd.Parameters.AddWithValue("@uye_mailadresi",textMail.Text); cmd.ExecuteNonQuery(); baglan.Close(); listle(); }
Vous n'avez pas besoin d'envelopper vos parameters avec des guillemets simples (par exemple '@uye_adresi') car .NET gérera cela en fonction des types de parameters qu'il identifie:
// Define your query and parameters var query = "INSERT INTO uyeler (uye_adi,uye_soyadi,uye_yasi,uye_adresi,uye_telefonu,uye_mailadresi) VALUES (@uye_adi,@uye_soyadi,@uye_yasi,@uye_adresi,@uye_telefonu,@uye_mailadresi)";
De plus, si vous envisagez de passer une valeur entière en paramètre, envisagez de la convertir au type approprié en utilisant Convert.ToInt32()
:
// This will pass in your parameter as an integer cmd.Parameters.AddWithValue("@uye_yasi",Convert.ToInt32(textYas.Text));
Si cela échoue, vous pouvez envisager d'utiliser la méthode Int32.TryParse()
qui permettra de vérifier si datatables sont des entiers valides avant de continuer:
int age; // Check if it is valid if(!Int32.TryParse(textYas.Text, out age)) { // It was invalid, consider alerting the user and trying again } // Otherwise, it was valid and the proper age is stored in age, so use it cmd.Parameters.AddWithValue("@uye_yasi",age);