private void timer1_Tick(object sender, EventArgs e)
        {
            int a=0;//  为了符合数据库类型 ,可空类型;
            
            Form4 nn = new Form4();
            SqlConnection sqlconn = new SqlConnection(@"server=(local);database=xmgl;uid=sa;pwd=;Connection Timeout=30");
            sqlconn.Open();
            
            SqlCommand sqlcomm = new SqlCommand("select * from money",sqlconn);            SqlDataReader sqlread = sqlcomm.ExecuteReader();
            while(sqlread.Read())
            {
                //a = (int)sqlread.GetValue(4);                                           a = (sqlread[4].ToString() == null ? 0 : Convert.ToInt32(sqlread[4]));//                  
                  if(a==0)
                {
                   DateTime b=Convert.ToDateTime(sqlread[5].ToString());
                    if(DateTime.Now>b)
                    {
                        nn.Show();
                    }
                }
                if(a==1)
                {
                    DateTime b = Convert.ToDateTime(sqlread[6].ToString());
                     if(DateTime.Now>b)
                    {
                        nn.Show();
                    }
                }
                if (a == 3)
                {
                    DateTime b = Convert.ToDateTime(sqlread[7].ToString().Trim());              //该字符串未被识别为有效的 DateTime。???
                    //DateTime b = (DateTime)sqlread.GetValue(7);
                  //  DateTime b = DateTime.Parse(sqlread[7].ToString());                         //该字符串未被识别为有效的 DateTime。???
                   // DateTime b = (DateTime)sqlread[7];                                                     //指定的转换无效。???
                  //  DateTime b = DateTime.Parse(sqlread[7].ToString());
                   // DateTime b = (DateTime)DateTime.Parse(Convert.ToDateTime(sqlread[7]).ToString("yyyy-MM-dd"));   //对象不能从 DBNull 转换为其他类型。
                  //  DateTime b = (DateTime)DateTime.Parse(Convert.ToDateTime(sqlread[7].ToString()).ToString("yyyy-MM-dd"));  //该字符串未被识别为有效的 DateTime??
                                        if(DateTime.Now>b)
                    {
                        nn.Show();
                    }
                }
                if (a==7)
                {
                    DateTime b = Convert.ToDateTime(sqlread[8].ToString());
                     if(DateTime.Now>b)
                    {
                        nn.Show();
                    }
                }
              
            }
}

解决方案 »

  1.   

    sqlread[7]中的值的格式是咋样的?
      

  2.   

    你跟踪一下sqlread[7]的值看看不就知道什么问题了
      

  3.   

    如果sqlread[7]的值是日期类型的就不需要转换成string类型。且sqlread[7]不能为空
      

  4.   

    sqlread[7].ToString().Trim()确定是日期?
      

  5.   

    DateTime dt = Convert.ToDateTime(sqlread[7].ToString());
      

  6.   

    你在sqlread[7]上面加一个断点,看看是什么值 // DateTime b = (DateTime)DateTime.Parse(Convert.ToDateTime(sqlread[7]).ToString("yyyy-MM-dd"));  //对象不能从 DBNull 转换为其他类型。 
    从这个可以看出,有的sqlread[7]是null的,这样的话,你就要判断一下
    DateTime b ;
    if( sqlread[7] != null)  //还是比较DBNull,你自己试试。
    {
        b = Convert.ToDateTime(sqlread[7]);
    }
    else
    {
       b = null;
    }
    ...
      

  7.   

    应该是这样
    if( sqlread[7] != system.DBNull.value)  //还是比较DBNull,你自己试试。 

        b = Convert.ToDateTime(sqlread[7]); 

    else 

      b = null; 

    谢谢,感动中