public KanjiData GetKanjiForLiteral(string literal)
 {
     KanjiData result = null;
     using (IDatabaseClient client = OpenDatabaseClient()) {
         client.SelectCommand = SQL_KANJI_ID_SELECT;
         client.AddCommandParameter("Literal", literal);
         DataTable data = client.Read();
         if (data.Rows.Count > 0) {
             var row = data.Rows[0];
             result = new KanjiData() { Literal = row["Literal"].ToString(), OnYomi = row["OnYomi"].ToString(), KunYomi = row["KunYomi"].ToString(), Meaning = row["Meaning"].ToString(), JLPTLevel = (JLPT)Enum.Parse(typeof(JLPT), row["JLPT"].ToString()), StrokeCount = Convert.ToInt32(row["StrokeCount"]) };
         }
     }
     return result;
 }
        public SaveResponse InsertKanji(KanjiData kanji)
        {
            using (IDatabaseClient client = OpenDatabaseClient())
            {
                client.SelectCommand = SQL_KANJI_ID_SELECT;
                client.InsertCommand = SQL_KANJI_INSERT;
                          
                DataTable data;

                client.AddCommandParameter("Id", 0);
                data = client.Read();
                client.ClearCommandParameters();

                DataRow newRow = data.NewRow();
                // newRow["Id"] = key;
                newRow["Literal"] = kanji.Literal;
                newRow["OnYomi"] = kanji.OnYomi;
                newRow["KunYomi"] = kanji.KunYomi;
                newRow["Meaning"] = kanji.Meaning;
                newRow["JLPT"] = kanji.JLPTLevel.ToString();
                newRow["StrokeCount"] = kanji.StrokeCount;
             
                return new SaveResponse(OperationResult.Success) { SavedObjectKey = client.InsertRow(newRow, "Id") };
            }
        }
        public void DeleteKanji(KanjiData kanji)
        {
            using (IDatabaseClient client = OpenDatabaseClient()) {
                client.SelectCommand = SQL_KANJI_LITERAL_SELECT;
                client.DeleteCommand = SQL_KANJI_DELETE;

                client.AddCommandParameter("Literal", kanji.Literal);
                
                DataTable data = client.Read();
                data.Rows[0].Delete();         
               
                client.Update(data);
            }
        }
        public SaveResponse UpdateKanji(KanjiData kanji)
        {
            using (IDatabaseClient client = OpenDatabaseClient()) {
                client.SelectCommand = SQL_KANJI_LITERAL_SELECT;
                client.UpdateCommand = SQL_KANJI_UPDATE;
                
                client.AddCommandParameter("Literal", kanji.Literal);

                DataTable data;
                data = client.Read();

                data.Rows[0]["OnYomi"] = kanji.OnYomi;
                data.Rows[0]["KunYomi"] = kanji.KunYomi;
                data.Rows[0]["Meaning"] = kanji.Meaning;
                data.Rows[0]["JLPT"] = kanji.JLPTLevel.ToString();
                data.Rows[0]["StrokeCount"] = kanji.StrokeCount;

                client.ClearCommandParameters();
                client.AddCommandParameter("Id", data.Rows[0]["Id"]);
              
                client.Update(data);
                return new SaveResponse(OperationResult.Success);
            }
        }