在masktextbox中无论是写“2000-1-1”还是“20000101”还是“2000/1/1”都会报出“字符串转换datatime失败的错误”代码如下 public void Part_SaveClass(string Sarr, string ID1, string ID2, Control.ControlCollection Contr, string BoxName, string TableName, int n, int m)
        {
            string tem_Field = "", tem_Value = "";
            int p = 2;
            if (m == 1)
            {    //当m为1时,表示添加数据信息
                if (ID1 != "" && ID2 == "")
                { //根据参数值判断添加的字段
                    tem_Field = "ID";
                    tem_Value = "'" + ID1 + "'";
                    p = 1;
                }
                else
                {
                    tem_Field = "Sut_id,ID";
                    tem_Value = "'" + ID1 + "','" + ID2 + "'";
                }
            }
            else
                if (m == 2)
                {    //当m为2时,表示修改数据信息
                    if (ID1 != "" && ID2 == "")
                    { //根据参数值判断添加的字段
                        tem_Value = "ID='" + ID1 + "'";
                        p = 1;
                    }
                    else
                        tem_Value = "Sut_ID='" + ID1 + "',ID='" + ID2 + "'";
                }            if (m > 0)
            { //生成部份添加、修改语句
                string[] Parr = Sarr.Split(Convert.ToChar(','));
                for (int i = p; i < n; i++)
                {
                    string sID = BoxName + i.ToString();    //通过BoxName参数获取要进行操作的控件名称
                    foreach (Control C in Contr)
                    {   //遍历控件集中的相关控件
                        if (C.GetType().Name == "TextBox" | C.GetType().Name == "MaskedTextBox" | C.GetType().Name == "ComboBox")
                            if (C.Name == sID)
                            { //如果在控件集中找到相应的组件
                               object Ctext = C.Text;
                                if (C.GetType().Name == "MaskedTextBox")    //如果当前是MaskedTextBox控件
                                    Ctext = Date_Format(C.Text);
                               
                                
                                //对当前控件的值进行格式化
                                if (m == 1)
                                {    //组合SQL语句中insert的相关语句
                                    tem_Field = tem_Field + "," + Parr[i];
                                    if (Ctext == "")
                                        tem_Value = tem_Value + "," + "NULL";
                                    else
                                        tem_Value = tem_Value + "," + "'" + Ctext + "'";
                                }
                                if (m == 2)
                                {    //组合SQL语句中update的相关语句
                                    if (Ctext == "")
                                        tem_Value = tem_Value + "," + Parr[i] + "=NULL";
                                    else
                                        tem_Value = tem_Value + "," + Parr[i] + "='" + Ctext + "'";
                                }
                            }
                    }
                }
                ADDs = "";
                if (m == 1) //生成SQL的添加语句
                    ADDs = "insert into " + TableName + " (" + tem_Field + ") values(" + tem_Value + ")";
                if (m == 2) //生成SQL的修改语句
                    if (ID2 == "")  //根据ID2参数,判断修改语句的条件
                        ADDs = "update " + TableName + " set " + tem_Value + " where ID='" + ID1 + "'";
                    else
                        ADDs = "update " + TableName + " set " + tem_Value + " where ID='" + ID2 + "'";
            }
        }  public string Date_Format(string NDate)
        {
            string sm, sd;
            int y, m, d;
            try
            {
                y = Convert.ToDateTime(NDate).Year;
                m = Convert.ToDateTime(NDate).Month;
                d = Convert.ToDateTime(NDate).Day;
            }
            catch
            {
                return "";
            }
            if (y == 1900)
                return "";
            if (m < 10)
                sm = "0" + Convert.ToString(m);
            else
                sm = Convert.ToString(m);
            if (d < 10)
                sd = "0" + Convert.ToString(d);
            else
                sd = Convert.ToString(d);
            return Convert.ToString(y) + "-" + sm + "-" + sd;
        }
 public SqlDataReader getcom(string SQLstr)
        {
            OpenCon();
            SqlCommand My_com = MyCon.CreateCommand();
            My_com.CommandText = SQLstr;
            SqlDataReader My_read = My_com.ExecuteReader();
            return My_read;
        }
        public DataSet getDataSet1(string SQLstr, string tableName)
        {
            OpenCon();   //打开与数据库的连接
            SqlDataAdapter SQLda = new SqlDataAdapter(SQLstr, MyCon);  //创建一个SqlDataAdapter对象,并获取指定数据表的信息
            DataSet My_DataSet = new DataSet(); //创建DataSet对象
            SQLda.Fill(My_DataSet, tableName);  //通过SqlDataAdapter对象的Fill()方法,将数据表信息添加到DataSet对象中
            CloseCon();    //关闭数据库的连接
            return My_DataSet;  //返回DataSet对象的信息           
        }
 private void button4_Click(object sender, EventArgs e)
        {
            if (tabControl1.SelectedTab.Name == "TP2_1") //如果当前是“个人简历”选项卡
            {                //定义字符串变量,并存储将“职工基本信息表”中的所有字段
                string All_Field = "ID,name,编号,型号,数量,生产厂商,投产日期,安装地点,所属部门,是否备用,负责人";                if (hold_n == 1 || hold_n == 2) //判断当前是添加,还是修改操作
                {
                    ModuleClass.MyModule.ADDs = ""; //清空MyModule公共类中的ADDs变量
                    //用MyModule公共类中的Part_SaveClass()方法组合添加或修改的SQL语句
                    MyModule1.Part_SaveClass(All_Field, L_1.Text.Trim(), "", tabControl1.TabPages[0].Controls, "L_", "设备设施信息表", 11, hold_n);
                    //如果ADDs变量不为空,则通过MyMeans公共类中的getsqlcom()方法执行添加、修改操作
                    if (ModuleClass.MyModule.ADDs != "")
                       MyMean.getsqlcom(ModuleClass.MyModule.ADDs);
                }
            }

解决方案 »

  1.   

    Convert.ToDateTime(NDate).Year;把格式那个参数加上不行吗?DateTime也有转化的方法有日期格式那个参数
      

  2.   

    DateTime t;
    DateTime.TryParse(this.maskedTextBox.Text.ToString(), out t);楼主很喜欢用convert啊 这个习惯不好
      

  3.   


                foreach (Control c in Controls)
                {
                    if (c.GetType().Name == "MaskedTextBox")
                    {
                        int y = Convert.ToDateTime(maskedTextBox1.Text).Year;
                        Console.Write(y.ToString());
                    }
                }么有异常呀.