2016-05-03 57 views
1

我試着將數據插入到使用C#郎我的數據庫,並在Windows的DataGridView顯示它Form.But它給我的具體錯誤:轉換失敗「@uye_yasi」到的數據類型爲int

轉換VARCHAR值時

轉換失敗「@uye_yasi」到的數據類型爲int

我敢肯定,我寫的所有列名correctly.There是一個例外,它的ID.Its主鍵,NOT NULL和自動遞增的。

連接字符串

SqlConnection baglan = new SqlConnection(@"Data Source=CASPER\SQLEXPRESS;Initial Catalog=kutuphane;Integrated Security=True"); 

的列表方法來顯示上的DataGridView; (工作沒有任何問題)上Form_Load事件

public void listele() 
{ 
    DataSet ds1 = new DataSet(); 
    baglan.Open(); 
    SqlDataAdapter da = new SqlDataAdapter("select * from uyeler",baglan); 
    da.Fill(ds1); 
    dataGridView1.DataSource = ds1.Tables[0]; 
    baglan.Close(); 
} 

代碼

private void Form3_Load(object sender, EventArgs e) 
{ 
    listele(); 

    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"; 
} 

代碼在CellContentClick事件的DataGridView上onclick事件

private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e) 
{ 
    int satir = dataGridView1.CurrentRow.Index; 

    textAd.Text = dataGridView1.Rows[satir].Cells["uye_adi"].Value.ToString(); 
    textSoyad.Text = dataGridView1.Rows[satir].Cells["uye_soyadi"].Value.ToString(); 
    textYas.Text = dataGridView1.Rows[satir].Cells["uye_yasi"].Value.ToString(); 
    textAdres.Text = dataGridView1.Rows[satir].Cells["uye_adresi"].Value.ToString(); 
    textTelefon.Text = dataGridView1.Rows[satir].Cells["uye_telefonu"].Value.ToString(); 
    textMail.Text = dataGridView1.Rows[satir].Cells["uye_mailadresi"].Value.ToString(); 
} 

代碼爲插入按鈕

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(); 
    listele(); 
} 
+0

您的價值在語音標記,所以它被插入爲文本,uye_yasi實際包含什麼? - 它很可能是文本 –

+0

uye_yasi是我的數據庫中的int列。我將它作爲@uye_yasi引用到textYas.Text(包含年齡的文本框) –

+0

將其轉換爲int –

回答

1

您不需要用單引號包裹您的參數(例如, 「@uye_adresi」)作爲.NET將負責執行,對於您根據該類型的參數,它標識:

// 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)"; 

此外,如果你是在傳遞一個整數值作爲參數規劃,考慮轉換它適當的類型事先使用Convert.ToInt32()

// This will pass in your parameter as an integer 
cmd.Parameters.AddWithValue("@uye_yasi",Convert.ToInt32(textYas.Text)); 

如果失敗,那麼你可以考慮使用Int32.TryParse()方法,將允許檢查數據,然後再繼續有效的整數:

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); 
+0

非常感謝!正如你所說,這個問題與單引號有關。當我使用它們時,它在單引號之間添加文本(這就是爲什麼它不是int值)。我可以成功代表我的大學項目;) –

相關問題