我在做一个winform项目,要按日期查询出我的日记表中的详细内容,前二个字段都是datetime类型的,我用的代码如下,运行报错为"从字符串向 datetime 转换时失败",但我不知道咋改,请各位高手帮帮忙。 
private void button1_Click(object sender, EventArgs e)
        {
            SqlConnection conn = new SqlConnection(@"");
            //创建数据库连接对象、数据库连接字符串
            SqlCommand cmd = conn.CreateCommand();
            cmd.CommandText = "select * from thing where date = 'dateTimPicker1.Value'";
            SqlDataReader reader = cmd.ExecuteReader();            while (reader.Read())
            {
                string xierushijian = reader.GetString(1);
                string dotime = reader.GetString(2);
                string thingscontent = reader.GetString(3);
                textBox3.Text = ("写入时间:" + xierushijian + "做此事的时间:" + dotime + "事项内容:" + thingscontent);
            }
       }

解决方案 »

  1.   

    trycmd.CommandText = "select * from thing where date = '" + dateTimPicker1.Value + "'";
      

  2.   

    cmd.CommandText = "select * from thing where date = '"+dateTimPicker1.Value+"'";
      

  3.   


    cmd.CommandText = "select * from thing where date = '"+dateTimPicker1.Value+"'";
      

  4.   

    4楼正解,所有的sql语句涉及变量都得有固定格式,如:where id='"+ temp +"' 或where id='"+ text1.text +"'等待
      

  5.   

    "select * from thing where date = '" + dateTimPicker1.Value + "'";
      

  6.   

    cmd.CommandText = "select * from thing where date = '"+convert.ToDateTime(dateTimPicker1.Value)+"'";
      

  7.   

    1,没有数据库连接字符串
    2,没写conn.open
    3,sql语句拼接写错
      

  8.   

    因为你数据库里的date和你传的值不一致,date一般是不用=来做判断的,因为有时分秒毫秒微秒,你能确定你传的值和数据库里的一致?所以判断要用范围或部分
      

  9.   

    To:cool一生,我也是dateTimPicker1.Value保存进去的,你能不能帮我讲详细一点该怎么改呢,谢谢
      

  10.   

    又出现了一个错误:string dotime = reader.GetString(2);这句报错为“无法将类型为“System.DateTime”的对象强制转换为“System.String”类型”。
      

  11.   

    string dotime = reader.GetString(2);
    改为:
    string dotime = reader[2].ToString();
      

  12.   

    to:zhanlixin,真的太谢谢你了,终于查出来了,同时也谢谢大家。
      

  13.   

    @lz:
    刚刚看到帖子,问题已经回答的差不多了。
    最后这个问题我帮助您来回答,为什么使用reader[fieldOrdinal].ToString()来进行取值.
    原因是因为使用读取器进行读取数据时,返回值类型是一个一般的object类型,其类型决定可以承载任何类型包括空值。所以才有您刚才一问。
    希望您能够理解..