public bool SaveData(UserClient client, List <KeyData.KeyEntry> data) { WordInsert Data = new WordInsert(); List <WordInsert> words = new List <WordInsert>(); String PKBT, CKBT;//Previous and current keyboard type PKBT = data[0].keyboardType; List <UserDBDataSetWorker.TimingRow> timingEntries = new List <UserDBDataSetWorker.TimingRow>(); int Ptime = Ptime = 0, Ctime = 0; Data.word = ""; foreach (KeyData.KeyEntry entry in data)//extract data from parameter data { UserDBDataSetWorker.TimingRow timingEntry = dataSet.Timing.NewTimingRow(); Ctime = entry.time; timingEntry.Timing = Ctime - Ptime; CKBT = entry.keyboardType; if (entry.keyValue == ':' || entry.keyValue == ',' || entry.keyValue == ' ') { if (Data.word != "") { Data.KeyboardType = keyToInt(CKBT); Data.UserID = GetUserClientID(client.GetName(), client.GetPass()); words.Add(Data); } Data = new WordInsert(); Data.word = ""; Ctime = 0; } else if (CKBT != PKBT) { if (Data.word != "") { Data.KeyboardType = keyToInt(CKBT); Data.UserID = GetUserClientID(client.GetName(), client.GetPass()); words.Add(Data); } Data = new WordInsert(); Data.word = ""; Ctime = 0; Data.word += entry.keyValue.ToString(); } else { Data.word += (char)entry.keyValue; if (timingEntry.Timing != Ctime) { timingEntries.Add(timingEntry); } } Ptime = Ctime; PKBT = CKBT; } //Get straggling data. Data.KeyboardType = keyToInt(data[data.Count - 1].keyboardType); Data.UserID = GetUserClientID(client.GetName(), client.GetPass()); words.Add(Data); foreach (WordInsert word in words)//enter words { UserDBDataSetWorkerTableAdapters.WordDataTableAdapter adapter = new UserDBDataSetWorkerTableAdapters.WordDataTableAdapter(); int test1 = GetUserClientID(client.GetName(), client.GetPass()); adapter.WordInsert(test1, word.word, word.KeyboardType); int test = GetLatestWordID(); for (int i = 1; i < word.word.Length; i++)//enter timing for words { UserDBDataSetWorkerTableAdapters.TimingTableAdapter timeAdapter = new UserDBDataSetWorkerTableAdapters.TimingTableAdapter(); timeAdapter.TimingInsert(GetLatestWordID(), timingEntries[i].Timing, i); } } return(true); }