繁体   English   中英

问题,转换 DBNull! 请使用以下代码帮助我解决错误对象无法从 DBNull 转换为 C# 中的其他类型

[英]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();

在将 reader 值分配给 int 之前,首先检查 reader 对象是否为 DBNull,例如

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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