简体   繁体   中英

Problem , Converting DBNull! Please help me from error object cannot be cast from DBNull to other type in C# with following code

            string connstr = "connstr";
            SqlConnection connection = new SqlConnection(@"Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=master;Integrated Security=True;Application Name=Aung");
            connection.Open();
            SqlCommand cmdCount = new SqlCommand("SELECT COUNT(*) FROM Mini_table WHERE Item = @Item", connection);
            cmdCount.Parameters.AddWithValue("@Item", cbox2.SelectedItem.ToString());
            int count = (int)cmdCount.ExecuteScalar();
            int i = 0;
            if (count > 0)
            {
                SqlCommand command = new SqlCommand("SELECT Qty FROM Mini_table WHERE Item = @Item", connection);
                command.Parameters.AddWithValue("@Item", cbox2.SelectedItem.ToString());
                using (SqlDataReader reader = command.ExecuteReader())
                {
                    while (reader.Read())
                    {
                        i = Convert.ToInt32(reader["Qty"]);

                    }
                }
                SqlCommand updatecmd = new SqlCommand("Update Mini_table set Qty=@Qty, Date=@Date where Item=@Item", connection);
                updatecmd.Parameters.AddWithValue("@Qty", i + Nd2.Value);
                updatecmd.Parameters.AddWithValue("@Date", DateTime.Now);
                updatecmd.Parameters.AddWithValue("@Item", cbox2.SelectedItem.ToString());
                updatecmd.ExecuteNonQuery();
                dgv2.DataSource = null;

                MessageBox.Show("Update successfully");
            }
            else
            {
                SqlCommand insertcmd = new SqlCommand("insert into Mini_table(Item,Qty,Date)values(@Item,@Qty,@Date)", connection);
                insertcmd.Parameters.AddWithValue("@Item", cbox2.SelectedItem.ToString());
                insertcmd.Parameters.AddWithValue("@Qty", Nd2.Value);
                insertcmd.Parameters.AddWithValue("@Date", DateTime.Now);

                insertcmd.ExecuteNonQuery();
                dgv2.DataSource = null;

                MessageBox.Show("Insert successfully");
            }
            connection.Close();
        }
        {
            string connstr = "connstr";
            SqlConnection connection = new SqlConnection(@"Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=master;Integrated Security=True;Application Name=Aung");
            connection.Open();
            SqlCommand cmdCount = new SqlCommand("SELECT COUNT(*) FROM Stotal_table WHERE Item = @Item", connection);
            cmdCount.Parameters.AddWithValue("@Item", cbox2.SelectedItem.ToString());
            int count = (int)cmdCount.ExecuteScalar();

            int i = 0;
            if (count > 0)

            {
                SqlCommand command = new SqlCommand("SELECT MiniBar FROM Stotal_table WHERE Item = @Item", connection);
                command.Parameters.AddWithValue("@Item", cbox2.SelectedItem.ToString());
                using (SqlDataReader reader = command.ExecuteReader())
                {
                    while (reader.Read())
                    {

                        i = Convert.ToInt32(reader["MiniBar"]);
                         
                        {
                            
                            
                        }

                        
                    }
                }
                SqlCommand updatecmd = new SqlCommand("Update Stotal_table set MiniBar=@MiniBar, where Item=@Item", connection);
                updatecmd.Parameters.AddWithValue("@MiniBar", i + Nd2.Value);
               
                updatecmd.Parameters.AddWithValue("@Item", cbox2.SelectedItem.ToString());
                updatecmd.ExecuteNonQuery();


            }
            else
            {
                SqlCommand insertcmd = new SqlCommand("insert into Stotal_table(Item,MiniBar)values(@Item,@MiniBar)", connection);
                insertcmd.Parameters.AddWithValue("@Item", cbox2.SelectedItem.ToString());
                insertcmd.Parameters.AddWithValue("@MiniBar", Nd2.Value);
               

                insertcmd.ExecuteNonQuery();




            }
            connection.Close();

Before assigning the reader value to int, first check if the reader object is DBNull for example

if (reader["MiniBar"] != DBNull.Value)
{
    i = Convert.ToInt32(reader["MiniBar"]);
}
else
{
    i = 0; // or -1 
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM