C# 在插入期间递增整数

C# 在插入期间递增整数,c#,.net,oledbconnection,C#,.net,Oledbconnection,我试图在插入过程中从c#.net页面增加MS Access表中的整数 我在尝试以下操作时遇到语法错误。还不确定我是否应该使用ExecuteNonQuery() OleDbCommand cmd = new OleDbCommand("INSERT INTO tblTarget(target,ref) VALUES(@target,(SELECT MAX(ref)+1 FROM tblTarget)", conn); cmd.Parameters.AddWithValue("@target",

我试图在插入过程中从c#.net页面增加MS Access表中的整数

我在尝试以下操作时遇到语法错误。还不确定我是否应该使用
ExecuteNonQuery()

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();

您缺少
tblTarget
后面的括号:

OleDbCommand cmd = 
    new OleDbCommand("INSERT INTO tblTarget(target,ref) VALUES(@target,(SELECT MAX(ref)+1 FROM tblTarget))", conn);
下面是对代码的一点回顾,请尝试使用以下模式:


您缺少一个括号,请尝试:

INSERT INTO tblTarget(target,ref) VALUES(@target,(SELECT MAX(ref)+1 FROM tblTarget))
但我认为你会有其他问题,你需要更接近这一点:

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

我不会使用sql或代码进行增量,我们可以使用
AutoNumber
数据类型自动增加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();
}

实现目标的正确方法是

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();

您得到的错误是什么?ExecuteOnQuery很好,但是,恕我直言,没有办法说服Access认识到syntaxDo表中存在任何行?所以当你选择(MAX)时,它不会返回null?啊,是的,刚刚发现了。现在获取System.Data.OleDb.OLEDBEException:未指定错误但每个表只能有一个错误
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();