private void button1_Click(object sender, EventArgs e)
        {
            if (IsNumeric (textBox1 .Text )==false )
            {
                MessageBox.Show("请输入正确的员工工号");
                textBox1.Focus();
                return;
            }
            if (dateTimePicker1.Value > dateTimePicker2.Value)
            {
                MessageBox.Show("时间不对");
                dateTimePicker2.Focus();
                return;
            }
            SMS.BaseClass.DataCon oper = new SMS.BaseClass.DataCon();
            string strsql1 = "SELECT empno,empname,CONVERT(varchar(10), PunchTime, 120) AS Expr1, DATENAME(weekday, PunchTime) AS Expr2, CONVERT(varchar(12), PunchTime, 8) AS Expr3 from Attend ";
            string EmpNo, EmpTime1, EmpTime2;
            EmpNo = textBox1.Text.ToString();
            EmpTime1 = Convert.ToDateTime(dateTimePicker1.Value).ToString("yyyy-MM-dd");
            EmpTime2 = Convert .ToDateTime (dateTimePicker2 .Value ).ToString ("yyyy-MM-dd");
            strsql1 = strsql1 + " where (empno='" + EmpNo + "') and (CONVERT(varchar(12), PunchTime, 112) >= '" + EmpTime1 + "') and (CONVERT(varchar(12), PunchTime, 112) <='" + EmpTime2 + "')";
            SqlDataReader dr = oper.getread(strsql1);
            if (dr.HasRows )
            {
                while (dr.Read() )
                {
                    if (label4.Text == "")
                        label4.Text = dr[1].ToString ();
                    if (label5.Text == "")
                        label5.Text = "从";
                    if (label6.Text == "")
                        label6.Text = EmpTime1;
                    if (label7.Text == "")
                        label7.Text = "到";
                    if (label8.Text == "")
                        label8.Text = EmpTime2;
                    if (label9.Text == "")
                        label9.Text = "的考勤记录";
                    ListViewItem li = new ListViewItem();
                    li.SubItems.Clear();
                    li.SubItems[0].Text = dr[2].ToString();
                    li.SubItems.Add(dr[3].ToString());
                    li.SubItems.Add(dr[4].ToString());
                    listView1.Items.Add(li);
                }
                dr.Close();            }
            else
            {
                MessageBox.Show("没有符合条件的数据");
                return;
            }
        }
提示对象名"Attend"无效(这是一个视图)

解决方案 »

  1.   

     oper.getread(strsql1); getread 这个函数 你看看,有没有正确的连接到数据库,还有 里面的 DataCommand  DataAdapter 之类有没有正确的设置属性。 
      

  2.   

    SMS.BaseClass.DataCon oper = new SMS.BaseClass.DataCon(); 
    SqlDataReader dr = oper.getread(strsql1); 
    需要SMS.BaseClass.DataCon类更详细的信息。特别是构造函数和getread()方法。
      

  3.   

    这个是SMS.BaseClass.DataCon类
            public SqlConnection getcon()
            {
                string M_str_sqlcon = "Data Source=(local);Database=db_SMS;User id=paololiu;PWD=paolo12345";
                SqlConnection myCon = new SqlConnection(M_str_sqlcon);
                return myCon;
            }
            #endregion
            public SqlDataReader getread(string M_str_sqlstr)
            {
                SqlConnection sqlcon = this.getcon();
                SqlCommand sqlcom = new SqlCommand(M_str_sqlstr, sqlcon);
                sqlcon.Open();
                SqlDataReader sqlread = sqlcom.ExecuteReader(CommandBehavior.CloseConnection);
                return sqlread;
            }
      

  4.   

    SMS.BaseClass.DataCon类 应该是没问题的,我在这里用过,可以正常运行的
            private void FrmAttend_Load(object sender, EventArgs e)
            {
                label4.Text = "";
                label5.Text = "";
                label6.Text = "";
                label7.Text = "";
                label8.Text = "";
                label9.Text = "";            textBox1.Text = "";
                
                //初始化listview
                listView1.GridLines = true;
                listView1.FullRowSelect = true;
                listView1.View = View.Details;
                listView1.Scrollable = true;
                listView1.MultiSelect = false;
                listView1.HeaderStyle = ColumnHeaderStyle.Nonclickable;
                listView1.Columns.Add("日期", 100, HorizontalAlignment.Right);
                listView1.Columns.Add("星期", 100, HorizontalAlignment.Center);
                listView1.Columns.Add("时间", 100, HorizontalAlignment.Center);            //SqlDataReader dr = new SqlDataReader();
                SMS.BaseClass.DataCon oper = new SMS.BaseClass.DataCon();
                string strsql = "SELECT   convert(varchar(10),DATEADD(mm,   DATEDIFF(mm,0,getdate()),   0),112)";
                SqlDataReader dr = oper.getread(strsql);
                if (dr.Read())
                {
                    dateTimePicker1.Value = DateTime.ParseExact(dr[0].ToString(), "yyyyMMdd", null);
                }
                else
                {
                    return;
                }
                dr.Close();
                
            }
      

  5.   

    另外我在http://msdn.microsoft.com/查了下,里面提到可能会是没有主键,索引等原因造成的,但Attend只是我做的一个视图,不知道怎么弄