2013-12-19 41 views
2

我想在插入期間從c#.net頁面的MS Access表中增加一個整數。在插入期間增加一個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

只能有一個表格,但謝謝Steve。 – 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:未指定的錯誤 – 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