0

データベースにデータを挿入しようとしましたが、挿入したものを選択すると、一貫性のないデータが表示されます。

たとえば、a = "data1"、b = "data2"、c="data3"を挿入します

しかし、選択すると、a = "0"、b = "data2"、c="data3"が表示されます

なぜ私は同じ方法を使用しますが、それらのいくつかは異なる値を取得します。

私の実装のリファレンス:SQLiteClient for WP(私は彼のコードを正しく実行することをテストし、彼がそれを行った方法を正確に実行しましたが、その後、異なる結果が得られました。)

INSERT関数:

String t_title = txtTitle.Text;
String t_img = "test";
String t_answer_a = txtAnswer1.Text;
String t_answer_b = txtAnswer2.Text;
String t_answer_c = txtAnswer3.Text;
String t_answer_d = txtAnswer4.Text;
String t_answer = txtAnswer1.Text;
int t_cat = 1;

int rec;
Random rnd = new Random();
string strInsert = " INSERT INTO tlg_question (q_title,q_img,q_ques_a,q_ques_b,q_ques_c,q_ques_d,q_ans,q_cat) VALUES (@q_title,@q_img,@q_ques_a,@q_ques_b,@q_ques_c,@q_ques_d,@q_ans,@q_cat)";

tlg_question tst = new tlg_question
{
    q_title = t_title,
    q_img = t_img,
    q_ques_a = t_answer_a,
    q_ques_b = t_answer_b,
    q_ques_c = t_answer_c,
    q_ques_d = t_answer_d,
    q_ans = t_answer,
    q_cat = t_cat
};
rec = (Application.Current as App).db.Insert<tlg_question>(tst, strInsert);

SELECT関数:

ObservableCollection<tlg_question> _tlg_questionEntries = null;

string strSelect = "SELECT q_id,q_title,q_img,q_ques_a,q_ques_b,q_ques_c,q_ques_d,q_ans,q_cat FROM tlg_question ORDER BY q_id DESC LIMIT 0,1";
_tlg_questionEntries = (Application.Current as App).db.SelectObservableCollection<tlg_question>(strSelect);

foreach (tlg_question data in _tlg_questionEntries)
{
    qid = data.q_id;
    txtTitle.Text += data.q_title;
    img = data.q_img;
    txtAnswer1.Text += data.q_ques_a;
    txtAnswer2.Text += data.q_ques_b;
    txtAnswer3.Text += data.q_ques_c;
    txtAnswer4.Text += data.q_ques_d;
}

また、私のUPDATE関数:

String t_title = txtTitle.Text;
String t_answer_a = txtAnswer1.Text;
String t_answer_b = txtAnswer2.Text;
String t_answer_c = txtAnswer3.Text;
String t_answer_d = txtAnswer4.Text;

int rec;
Random rnd = new Random();
string strUpdate = " UPDATE tlg_question SET q_title=@q_title,q_ques_a=@q_ques_a,q_ques_b=@q_ques_b,q_ques_c=@q_ques_c,q_ques_d=@q_ques_d,q_ans=@q_ans WHERE q_id=@q_id";

tlg_question tst = new tlg_question
{
    q_id = qid,
    q_title = t_title,
    q_ques_a = t_answer_a,
    q_ques_b = t_answer_b,
    q_ques_c = t_answer_c,
    q_ques_d = t_answer_d,
    q_ans = t_answer_a
};
rec = (Application.Current as App).db.Update<tlg_question>(tst, strUpdate);

私を助けてくれる人に感謝します!!!

*または、SQLiteをあきらめて他のデータベースに移動する必要があると思われる場合は、お知らせください。mysqlのような単純なクエリとFF SQLite Managerを処理するため、最初にSQLiteを選択します。

ありがとう!

4

1 に答える 1

0

さて、私はテストして、最終的に、すべての列を一度に挿入または更新する必要があることを発見しました。そうすれば、ジョブを正しく実行できるのは私だけです。これがDBHelperの制限またはSQLiteClientのために発生するかどうかはわかりません。

詳細:

たとえば、プリセットデータベースが次のように4列を宣言した場合:

[q_id, q_title, q_ques, q_ans] (q_id as Auto Increment)

次に、INSERTまたはUPDATEを実行するときに、q_titleのみを挿入する必要がある場合でも(q_quesとq_ansをDEFAULT値のままにします)、操作にすべての列のパラメーターを含める必要があります。

INSERT INTO tlg_question (q_title,q_ques,q_ans) VALUES (@q_title,@q_ques,@q_ans)";

PHP MYSQLで通常行っていることとは異なり、好きな特定の列を問題なく挿入/更新できます。

INSERT INTO tlg_question (q_title) VALUES (@q_title)";

p / s:私はSQLiteとC#を初めて使用します。実際に何が起こっているかを知っている場合は、アドバイス/修正してください。

ありがとう!:)

于 2012-04-28T05:55:06.453 に答える