public static void Update(GradeField gradeField)
 {
     SqlHelper.ExecuteNonQuery(@"Update T_Grade set
         CompletedDate=@CompletedDate,
         Pagragraph=@Pagragraph,
         Speed=@Speed,
         BackSpace=@BackSpace,
         HitKey=@HitKey,
         KeyLong=@KeyLong,
         WrongWords=@WrongWords,
         WordsCount=@WordsCount,
         KeyCount=@KeyCount,
         CostTime=@CostTime",
         new OleDbParameter("@CompletedDate", gradeField.CompletedDate.ToString("G")),
         new OleDbParameter("@Pagragraph", gradeField.Paragraph),
         new OleDbParameter("@Speed", gradeField.Speed),
         new OleDbParameter("@BackSpace", gradeField.BackSpace),
         new OleDbParameter("@HitKey", gradeField.HitKey),
         new OleDbParameter("@KeyLong", gradeField.KeyLong),
         new OleDbParameter("@WrongWords", gradeField.WrongWords),
         new OleDbParameter("@WordsCount", gradeField.WordsCount),
         new OleDbParameter("@KeyCount", gradeField.KeyCount),
         new OleDbParameter("@CostTime", gradeField.CostTime)
         );
 }
        public static List<GradeField> GetAll()
        {
            DataTable dt = SqlHelper.ExecuteDataTable("Select * from T_Grade");
            List<GradeField> gradeFields = new List<GradeField>();

            for (int i = 0; i < dt.Rows.Count; i++)
            {
                DataRow row = dt.Rows[i];
                GradeField gradeField = new GradeField();
                gradeField = ToDataField(row);
                gradeFields.Add(gradeField);
            }

            return gradeFields;
        }
 public static void Insert(GradeField gradeField)
 {
     SqlHelper.ExecuteNonQuery(@"Insert into T_Grade(
         CompletedDate, Paragraph, Speed, BackSpace, HitKey, KeyLong, WrongWords, WordsCount, KeyCount, CostTime)
         values(@CompletedDate, @Paragraph, @Speed, @BackSpace, @HitKey, @KeyLong, @WrongWords, @WordsCount, @KeyCount, @CostTime)",
         new OleDbParameter("@CompletedDate", gradeField.CompletedDate.ToString("G")),
         new OleDbParameter("@Paragraph", gradeField.Paragraph),
         new OleDbParameter("@Speed", gradeField.Speed),
         new OleDbParameter("@BackSpace", gradeField.BackSpace),
         new OleDbParameter("@HitKey", gradeField.HitKey),
         new OleDbParameter("@KeyLong", gradeField.KeyLong),
         new OleDbParameter("@WrongWords", gradeField.WrongWords),
         new OleDbParameter("@WordsCount", gradeField.WordsCount),
         new OleDbParameter("@KeyCount", gradeField.KeyCount),
         new OleDbParameter("@CostTime", gradeField.CostTime)
         );
 }
        public void InsertTest()
        {
            GradeField gradeField = new GradeField();
            gradeField.CompletedDate = DateTime.Now;
            gradeField.Paragraph = "第N段";
            gradeField.Speed = 14.1234556;
            gradeField.BackSpace = 9;
            gradeField.HitKey = 5.123456;
            gradeField.KeyLong = 2.123456;
            gradeField.WrongWords = 3;
            gradeField.WordsCount = 98;
            gradeField.KeyCount = 123;
            gradeField.CostTime = "0:21.88";

            DataOperationDAL.Insert(gradeField);
            dataCount++;
            Assert.IsNotNull(gradeField);
        }
        private void textBoxInput_TextChanged(object sender, EventArgs e)
        {
            try
            {
                if (this.Vabs(this.textBoxInput.Text.Length - preLen) > 100)
                {
                    this.Reset();
                }
                else
                {
                    if (!_flagSpeed)
                    {
                        timerSpeed.Start();
                    }
                    int num3;
                    this.MyTrimEnd(this.textBoxInput.Text);
                    if (this.textBoxInput.Text.Length >= wordsCount)
                    {
                        this.textBoxInput.Text = this.textBoxInput.Text.Substring(0, wordsCount);
                    }
                    this.labelLeave.Text = "余" + ((wordsCount - this.textBoxInput.TextLength)).ToString() + "字";
                    double num2 = ((double)(this.textBoxInput.Text.Length * 100)) / ((double)wordsCount);
                    //this.lableRate.Text = string.Format("{0:0.00}", num2) + "%";
                    this.progressBar1.Value = (this.textBoxInput.Text.Length * this.progressBar1.Maximum) / wordsCount;
                    for (num3 = preLen - 1; num3 >= this.textBoxInput.Text.Length; num3--)
                    {
                        this.richTextBoxGot.Select(num3, 1);
                        this.richTextBoxGot.SelectionBackColor = Color.White;
                    }
                    num3 = this.textBoxInput.TextLength - 30;
                    if (num3 < 0)
                    {
                        num3 = 0;
                    }
                    while (num3 < this.textBoxInput.Text.Length)
                    {
                        if (this.textBoxInput.Text[num3] == this.richTextBoxGot.Text[num3])
                        {
                            this.richTextBoxGot.Select(num3, 1);
                            this.richTextBoxGot.SelectionBackColor = Color.DarkGray;
                            isRight[num3] = true;
                        }
                        else
                        {
                            this.richTextBoxGot.Select(num3, 1);
                            this.richTextBoxGot.SelectionBackColor = Color.Red;
                            isRight[num3] = false;
                        }
                        num3++;
                    }
                    int selectionStart = this.richTextBoxGot.SelectionStart;
                    int lineFromCharIndex = this.richTextBoxGot.GetLineFromCharIndex(selectionStart);
                    if (lineFromCharIndex != preLine)
                    {
                        int num6 = this.richTextBoxGot.GetLineFromCharIndex(this.richTextBoxGot.TextLength - 1);
                        int start = this.richTextBoxGot.GetFirstCharIndexOfCurrentLine() - 1;
                        if (start < 0)
                        {
                            start = 0;
                        }
                        if (lineFromCharIndex < num6)
                        {
                            this.richTextBoxGot.Select(start, 1);
                            this.richTextBoxGot.ScrollToCaret();
                        }
                        preLine = lineFromCharIndex;
                    }
                    preLen = this.textBoxInput.Text.Length;
                    if (this.textBoxInput.Text.Length == wordsCount && textBoxInput.Text[wordsCount - 1] == richTextBoxGot.Text[wordsCount - 1])
                    {
                        // MessageBox.Show( richTextBoxGot.Text[actLen - 1].ToString (),textBoxInput.Text[actLen-1].ToString ());
                        double keyLong;
                        this.timerCount.Stop();
                        string str = "";
                        string str2 = "";
                        wrongWords = 0;
                        rightWord = 0;
                        for (num3 = 0; num3 < wordsCount; num3++)
                        {
                            if (this.richTextBoxGot.Text[num3] != this.textBoxInput.Text[num3])
                            {
                                wrongWords++;
                                str = str + this.richTextBoxGot.Text[num3];
                                str2 = str2 + this.textBoxInput.Text[num3];
                            }
                            else
                            {
                                rightWord++;
                            }
                        }
                        this.textBoxInput.ReadOnly = true;
                        this.textBoxInput.Select(this.textBoxInput.Text.Length, 0);
                        if (this.textBoxInput.Text.Length != 0)
                        {
                            keyLong = ((double)keyCount) / ((double)this.textBoxInput.Text.Length);
                        }
                        else
                        {
                            keyLong = 0.0;
                        }
                        endTime = DateTime.Now.TimeOfDay.TotalSeconds;
                        FollowTyperc.countCost += endTime - startTime;
                        avgTime += FollowTyperc.countCost;
                        avgBack += backSpace;
                        avgPress += keyCount;
                        avgWords += wordsCount;
                        avgWrongWords += wrongWords;

                        double num9 = (((rightWord + wrongWords) - (5 * wrongWords)) * 60.0) / FollowTyperc.countCost;
                        double hitKey = ((double)keyCount) / FollowTyperc.countCost;
                        this.dataGridViewResult.Rows.Add(new object[] { page, string.Format("{0:0.00}", num9), string.Format("{0:0.00}", hitKey), string.Format("{0:0.00}", keyLong), backSpace.ToString(), string.Format("{0:0000}", num) });
                        this.dataGridViewResult.Sort(this.dataGridViewResult.Columns[this.dataGridViewResult.Columns.Count - 1], ListSortDirection.Descending);
                        string s = "";// this.lablePara.Text + " 速度";
                        double dsped = num9;
                        string speed = "";
                        int num12;
                        if (!english_Show)
                        {
                            s = this.lablePara.Text + " 速度";

                            //if (wrongWord > 0)
                            //{
                            //    spd = string.Format("{0:0.00}", num9) + "/";
                            //    s = s + string.Format("{0:0.00}", num9) + "/";
                            //    num9 = (rightWord * 60.0) / FollowTyperc.countCost;
                            //    s = s + string.Format("{0:0.00}", num9);
                            //    spd += string.Format("{0:0.00}", num9);
                            //}
                            //else
                            //{
                            s = s + string.Format("{0:0.00}", num9);
                            speed += string.Format("{0:0.00}", num9);
                            //}
                            timerSpeed.Stop();
                            _flagSpeed = false;
                            lableSpeed.Text = speed;
                            if (str == "")
                            {
                                str = " 错字:无";
                            }
                            else
                            {
                                str = " 正[" + str + "] 误[" + str2 + "]";
                            }
                            object obj2 = s;
                            s = string.Concat(new object[] { obj2, " 回改", backSpace, " 击键", string.Format("{0:0.00}", hitKey), " 码长", string.Format("{0:0.00}", keyLong) });
                            double countCosts = FollowTyperc.countCost;

                            num12 = (int)(countCosts / 60.0);
                            countCosts -= num12 * 60;

                            if (bolA[0])// (bwrongWord)
                            {
                                s += " 错字" + wrongWords;
                            }

                            if (bolA[1])//  (bcountWord)
                            {
                                s += " 字数" + wordsCount;
                            }

                            if (bolA[2])
                            {
                                s += " 键数" + keyCount;
                            }
                            string UseTime = " 用时" + num12 + ":" + string.Format("{0:0.00}", countCosts);
                            if (bolA[3])// (bTime )
                            {
                                s += UseTime;
                            }

                            if (bolA[4])// (bwroRight  )
                            {
                                s += str;
                            }

                            _todayWordsCount += wordsCount;
                            _ToatlWordsCount += wordsCount;
                            s += SignSet();
                            SendToQQ(s);
                            // labelInfo.Text = "成绩格式:中文";
                            labWords.Text = "今日:" + _todayWordsCount + " 总数:" + _ToatlWordsCount;
                        }
                        else
                        {
                            s = "Paragraph:" + page + " Speed:";

                            if (wrongWords > 0)
                            {
                                speed = string.Format("{0:0.00}", num9) + "/";
                                s = s + string.Format("{0:0.00}", num9) + "/";
                                num9 = (rightWord * 60.0) / FollowTyperc.countCost;
                                s = s + string.Format("{0:0.00}", num9);
                                speed += string.Format("{0:0.00}", num9);
                            }
                            else
                            {
                                s = s + string.Format("{0:0.00}", num9);
                                speed += string.Format("{0:0.00}", num9);
                            }
                            timerSpeed.Stop();
                            _flagSpeed = false;
                            lableSpeed.Text = speed;
                            if (str == "")
                            {
                                str = " WrongWords:None";
                            }
                            else
                            {
                                str = " Ture[" + str + "] False[" + str2 + "]";
                            }
                            object obj2 = s;
                            s = string.Concat(new object[] { obj2, " BackSpace:", backSpace, " Hits:", string.Format("{0:0.00}", hitKey), " WordLength:", string.Format("{0:0.00}", keyLong) });
                            double countCosts = FollowTyperc.countCost;

                            num12 = (int)(countCosts / 60.0);
                            countCosts -= num12 * 60;

                            if (bolA[0])// (bwrongWord)
                            {
                                s += " WrongWordCounts:" + wrongWords;
                            }

                            if (bolA[1])//  (bcountWord)
                            {
                                s += " WordsCounts:" + wordsCount;
                            }

                            if (bolA[2])
                            {
                                s += " KeyCounts:" + keyCount;
                            }
                            string UseTime = " Time:" + num12 + ":" + string.Format("{0:0.00}", countCosts);
                            if (bolA[3])// (bTime )
                            {
                                s += UseTime;
                            }

                            if (bolA[4])// (bwroRight  )
                            {
                                s += str;
                            }

                            _todayWordsCount += wordsCount;
                            _ToatlWordsCount += wordsCount;
                            s += SignSetEnglish();
                            SendToQQ(s);
                            // labelInfo.Text = "成绩格式:英文" ;
                            labWords.Text = "Today:" + _todayWordsCount + " Total:" + _ToatlWordsCount;
                        }
                        System.Threading.ThreadPool.QueueUserWorkItem(o =>
                        {
                            if (dsped > 4 && IsHandleCreated)
                            {
                                Invoke(new Action(() =>
                                {
                                    GradeField gradeField = new GradeField();
                                    gradeField.CompletedDate = DateTime.Now;
                                    gradeField.Paragraph = lablePara.Text;
                                    gradeField.Speed = double.Parse(speed);
                                    gradeField.BackSpace = backSpace;
                                    gradeField.HitKey = double.Parse(string.Format("{0:0.00}", hitKey));
                                    gradeField.KeyLong = double.Parse(string.Format("{0:0.00}", keyLong));
                                    gradeField.WrongWords = wrongWords;
                                    gradeField.WordsCount = wordsCount;
                                    gradeField.KeyCount = keyCount;
                                    gradeField.CostTime = num12 + ":" + string.Format("{0:0.00}", countCost);

                                    DataOperationDAL.Insert(gradeField);
                                }));
                            }
                        });

                        System.Threading.ThreadPool.QueueUserWorkItem(o =>
                        {
                            if (sendafterType)
                            {
                                Invoke(new Action(() =>
                                {
                                    SendText();
                                }));
                            }
                        });

                        grade = new StringBuilder(s);
                        averageGrade(num9, hitKey);
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
        //把公共的代码,封装到一个方法中,提高代码的利用性
        private static GradeField ToDataField(DataRow row)
        {
            GradeField gradeField = new GradeField();
            gradeField.CompletedDate = (DateTime)row["CompletedDate"];
            gradeField.Paragraph = (string)row["Paragraph"];
            gradeField.Speed = (double)row["Speed"];
            gradeField.BackSpace = (int)row["BackSpace"];
            gradeField.HitKey = (double)row["HitKey"];
            gradeField.KeyLong = (double)row["KeyLong"];
            gradeField.WrongWords = (int)row["WrongWords"];
            gradeField.WordsCount = (int)row["WordsCount"];
            gradeField.KeyCount = (int)row["KeyCount"];
            gradeField.CostTime = (string)row["CostTime"];

            return gradeField;
        }