-2

このエラーが発生しました:

構文エラー INSERT INTO ステートメント

これは正解です。もう 1 つは SQL です。申し訳ありません

//Server Connection
private void ServerConnect()
{
    string ConnString;
    ConnString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=PLAN.accdb";
    TConn = new OleDbConnection(ConnString);
    TConn.Open();
    MessageBox.Show("You Are Connected.");
    TConn.Close();
}

//ADD MEMOS
private void GetMemoList()
{
    string query;
    DataSet ds = new DataSet();
    query = "SELECT MEMO_ID,DATE,TIME,MEMOS FROM TBLMEMO ORDER BY DATE ASC";
    OleDbDataAdapter da = new OleDbDataAdapter(query, TConn);
    da.Fill(ds);
    this.dgv1.DataSource = ds.Tables[0];
}

private void AddMemo(string MemoDate, string MemoTime, string Memos)
{
    TConn.Open();

    string acc;
    acc = "INSERT INTO TBLMEMO (DATE,TIME,MEMOS) VALUES (@Memodate,@MemoTime,@Memos)";
    OleDbCommand cmd = new OleDbCommand(acc, TConn);
    cmd.Parameters.AddWithValue("@memDate", MemoDate);
    cmd.Parameters.AddWithValue("@memTime", MemoTime);
    cmd.Parameters.AddWithValue("@memos", Memos);
    cmd.ExecuteNonQuery();
    TConn.Close();
}

private void btnAddMemos_Click(object sender, EventArgs e)
{
    AddMemo(this.dtpDate.Value.ToShortDateString(), this.dtpTime.Value.ToShortTimeString(), this.txtInfo.Text.Trim());
    GetMemoList();
    txtInfo.Clear();
}
4

4 に答える 4

1

テーブルの主キーが自動インクリメントに設定されていない可能性があります

于 2013-02-21T10:19:52.183 に答える
0

クエリでフィールドを指定してみてください

acc = "INSERT INTO TBLMEMO (fld1Name, fld2Name, fld3Name) VALUES ('" + MemoDate + "','" + MemoTime + "','" + Memos + "')";
于 2013-02-21T10:09:55.033 に答える
0

テーブル TBLMEMO には 3 つ以上のフィールドがある場合がありますが、挿入するフィールドは 3 つだけです。そのため、「クエリ値の数と宛先フィールドが同じではありません」というエラーが表示されます。

試す

"INSERT INTO TBLMEMO(COLUMNNAME1, COLUMNNAME2, COLUMNNAME3) VALUES ('" + MemoDate + "','" + MemoTime + "','" + Memos + "')";
于 2013-02-21T10:08:44.587 に答える
0

INSERT ステートメントでは常にターゲット列を指定します。SQL インジェクション攻撃を避けるために、ステートメントでパラメーターを使用することもできます。

var acc = "INSERT INTO TBLMEMO (DATE, TIME, MEMOS) VALUES (@date, @time, @memos)";
TConn.Open();
var cmd = new SqlCommand(acc, TConn);
cmd.Parameters.AddWithValue("date", MemoDate);
cmd.Parameters.AddWithValue("time", MemoTime);
cmd.Parameters.AddWithValue("memos", Memos);
cmd.ExecuteNonQuery();
TConn.Close();
于 2013-02-21T10:15:51.527 に答える