質問

I'm trying to increment an integer in an MS Access table from a c# .net page during insert.

I'm getting a syntax error when attempting the following. Also unsure if I should be using an ExecuteNonQuery() or not?

OleDbCommand cmd = new OleDbCommand("INSERT INTO tblTarget(target,ref) VALUES(@target,(SELECT MAX(ref)+1 FROM tblTarget)", conn);

cmd.Parameters.AddWithValue("@target", TextTitle.Text);
conn.Open();
cmd.ExecuteNonQuery();
conn.Close();
役に立ちましたか?

解決 3

The correct way to achieve your goal is

string sql = "INSERT INTO tblTarget (target,ref) " + 
             "SELECT ?, MAX(ref)+1 FROM tblTarget";
OleDbCommand cmd = new OleDbCommand(sql, conn);
cmd.Parameters.AddWithValue("@target", TextTitle.Text);
cmd.ExecuteNonQuery();

他のヒント

You miss a bracket after tblTarget:

OleDbCommand cmd = 
    new OleDbCommand("INSERT INTO tblTarget(target,ref) VALUES(@target,(SELECT MAX(ref)+1 FROM tblTarget))", conn);

Here is a little review of your code, try using the using pattern:

using(var conn = new Connection())
{
    conn.Open();
    string sql = "INSERT INTO tblTarget(target,ref) VALUES(@target,(SELECT MAX(ref)+1 FROM tblTarget))";
    OleDbCommand cmd = new OleDbCommand(sql, conn);

    cmd.Parameters.AddWithValue("@target", TextTitle.Text);

    cmd.ExecuteNonQuery();
}

You're missing a bracket, try:

INSERT INTO tblTarget(target,ref) VALUES(@target,(SELECT MAX(ref)+1 FROM tblTarget))

But I think you are going to have other issues, you need something closer to this:

INSERT INTO tblTarget ( target, ref )
SELECT @target AS Targ, First((SELECT MAX(ref)+1 FROM tblTarget)) AS MaxRef
FROM tblTarget
GROUP BY @target;

I would not do the increment by the sql or code, we can use AutoNumber data type for auto increase the value in access.

string sql = "INSERT INTO tblTarget(target) VALUES(@target)";
using(var conn = new Connection())
using(OleDbCommand cmd = new OleDbCommand(sql, conn))
{
    conn.Open();
    cmd.Parameters.AddWithValue("@target", TextTitle.Text);
    cmd.ExecuteNonQuery();
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top