2013-12-19 3 views
2

Я пытаюсь увеличить число целых чисел в таблице MS Access с страницы C# .net во время вставки.Инкремент int во время вставки

Я получаю синтаксическую ошибку при попытке выполнить следующее. Также неуверенный, должен ли я использовать 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(); 
+2

, что это ошибка, которую вы получаете ?? –

+0

текст ошибки ????? –

+1

ExecuteNonQuery в порядке, но, AFAIK, нет способа убедить Access распознать этот синтаксис – Steve

ответ

2

Правильный путь для достижения этой цели является

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

Совершено трюк, спасибо Стиву. – Bobney

4

Вы пропустите кронштейн после tblTarget:

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

Вот небольшой обзор кода, попробуйте использовать using шаблон:

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(); 
} 
+0

Ах да, просто заметил это. Теперь получение System.Data.OleDb.OleDbException: Unspecified error – Bobney

3

Вы упускаете кронштейн, попробуйте:

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; 
0

Я бы не сделать приращение по SQL или кода, мы можем использовать AutoNumber тип данных для автоматического увеличения значения в доступ.

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(); 
} 
+0

У вас может быть только один за стол, хотя – JMK

Смежные вопросы