2016-07-31 17 views
0

Ich versuche, Integer-Wert in Access-Datenbank einzufügen, aber es gibt mir Object kann nicht von DBNull auf andere Typen umgewandelt werden. Fehler aber in Datagridview im Wert setzen, aber zeigen Sie mir diesen FehlerWarum Integer-Wert nicht in Access-Datenbank eingefügt wird

string Medicine_Name = dataGridView1.Rows[e.RowIndex].Cells["Medicine_Name"].Value.ToString(); 
      string Dealer_name = dataGridView1.Rows[e.RowIndex].Cells["Dealer_name"].Value.ToString(); 
      int Availability =Convert.ToInt16(dataGridView1.Rows[e.RowIndex].Cells["Availability"].Value); 


       if (dataGridView1.IsCurrentRowDirty) 
       { 
        string connectionString = null; 
        connectionString = ConfigurationManager.ConnectionStrings["AccessConnectionString"].ConnectionString; 
        con.ConnectionString = connectionString; 

        string cmd1 = "insert into Medicine_Available_Detail(Medicine_Name,Dealer_name,Availability) values(@Medicine_Name,@Dealer_name,@Availability)"; 
         OleDbCommand cmd = new OleDbCommand(cmd1, con); 

         cmd.CommandType = CommandType.Text; 
         cmd.Parameters.AddWithValue("@Medicine_Name",Medicine_Name); 
         cmd.Parameters.AddWithValue("@Dealer_name", Dealer_name); 
         cmd.Parameters.AddWithValue("@Availability", Availability); 
con.Open(); 
        int n = cmd.ExecuteNonQuery(); 
        con.Close(); 
        if (n > 0) 
        { 

         MessageBox.Show("Data Inserted Successfully", "Data Inserted ", MessageBoxButtons.OK, MessageBoxIcon.Information); 


        } 

       } 

enter image description here

+0

Der Fehler bedeutet, dass 'dataGridView1.Rows [e.RowIndex] .Cells [ "Verfügbarkeit"]. Value' gibt 'DBNull' zurück, das nicht in int umgewandelt werden kann (casted). Auf welcher Zeile tritt der Fehler auf? – surfmuggle

+0

auf Availability Spalte und 2. Zeile Fehler tritt auf letzten 15 Tagen im Versuch, dieses Problem zu lösen, aber fehlgeschlagen – Atul

Antwort

0

bekam schließlich eine Lösung auf das ich meinen Code dataGridView1_RowLeave zu dataGridView1_CellValueChanged ändern und seine adaequat

private void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e) 
{ 
med_id = dataGridView1.Rows[e.RowIndex].Cells["Med_id"].Value.ToString(); 

if (med_id == "") 
{ 
med_id1 = 0; 
} 
else 
{ 
med_id1 = Convert.ToInt32(dataGridView1.Rows[e.RowIndex].Cells["Med_id"].Value.ToString()); 

} 
if (med_id1 == 0) 
{ 
try 
{ 
string Medicine_Name = dataGridView1.Rows[e.RowIndex].Cells["Medicine_Name"].Value.ToString(); 
string Dealer_name = dataGridView1.Rows[e.RowIndex].Cells["Dealer_name"].Value.ToString(); 
int Availability = Convert.ToInt32(dataGridView1.Rows[e.RowIndex].Cells["Availability"].Value.ToString()); 
string cmd1 = "insert into Medicine_Available_Detail(Medicine_Name,Dealer_name,Availability) values(@Medicine_Name,@Dealer_name,@Availability)"; 
OleDbCommand cmd = new OleDbCommand(cmd1, con); 

cmd.CommandType = CommandType.Text; 
cmd.Parameters.AddWithValue("@Medicine_Name", Medicine_Name); 
cmd.Parameters.AddWithValue("@Dealer_name", Dealer_name); 
cmd.Parameters.AddWithValue("@Availability", Availability); 
con.Open(); 
int n = cmd.ExecuteNonQuery(); 
con.Close(); 
if (n > 0) 
{ 

MessageBox.Show("Data Inserted Successfully", "Data Inserted ", MessageBoxButtons.OK, MessageBoxIcon.Information); 


} 
Load_data(); 
dataGridView1.Refresh(); 
} 
catch (Exception ex) 
{ 

} 


} 
else 
{ 
string Medicine_Name = dataGridView1.Rows[e.RowIndex].Cells["Medicine_Name"].Value.ToString(); 
string Dealer_name = dataGridView1.Rows[e.RowIndex].Cells["Dealer_name"].Value.ToString(); 
int Availability = Convert.ToInt32(dataGridView1.Rows[e.RowIndex].Cells["Availability"].Value.ToString()); 
cmd = new OleDbCommand(); 

cmd.CommandType = CommandType.Text; 
cmd = con.CreateCommand(); 
cmd.CommandText = "update Medicine_Available_Detail set Medicine_Name='" + dataGridView1.Rows[e.RowIndex].Cells["Medicine_Name"].Value.ToString() + "',Dealer_name='" + dataGridView1.Rows[e.RowIndex].Cells["Dealer_name"].Value.ToString() + "',Availability='" + Convert.ToInt32(dataGridView1.Rows[e.RowIndex].Cells["Availability"].Value.ToString())+ "'where Med_id=" + med_id1 + ""; 
con.Open(); 
int n = cmd.ExecuteNonQuery(); 
con.Close(); 
if (n > 0) 
{ 

MessageBox.Show("Data Updated Successfully", "Data Inserted ", MessageBoxButtons.OK, MessageBoxIcon.Information); 


} 
Load_data(); 
dataGridView1.Refresh(); 

} 
} 
0

Der „Bleistift“ zeigt an, dass die Zeile bearbeitet wird, so dass - auch bei einem eingegebenen Wert von 2 - den Wert von Verfügbarkeit kann sehr gut null sein.

So scheint Ihr Konzept fehlerhaft; Sie sollten nicht versuchen, Daten einzufügen, wenn dataGridView1.IsCurrentRowDirtywahr ist aber wenn es false ist.

+0

ich kommentieren if (dataGridView1.IsCurrentRowDirty) {dieser Teil aber immer noch gleichen Fehler Objekt kann nicht von DBNull zu anderen Typen umgewandelt werden . und wenn ich oben kommentiert wurde Teil eingefügt Wert wiederholt – Atul

+0

Weiß nicht Ihre Anwendung, aber es scheint, die 'RowLeave' ist nicht das Ereignis zu verwenden. – Gustav

+0

Wenn RowLeave nicht das zu verwendende Ereignis ist. dann, wie Zeichenkette Wert eingefügt wird fein freind – Atul