2014-04-22 16 views
0

我試圖從XML文件中讀取一些數據到我的數據庫中。問題是它只執行一個準備好的語句(我定義的第一個語句),這會導致錯誤。SQL Server CE執行相同的準備好的語句不管什麼

這工作:

conn = getConnection(); 
conn.Open(); 

SqlCeCommand cmd = conn.CreateCommand(); 
cmd.CommandText = "INSERT INTO ra_gestiuni ([denumire],[id_ra]) Values(@denumire,@id_ra)"; 

SqlCeParameter numeParam = new SqlCeParameter("@denumire", SqlDbType.NVarChar, 100); 
numeParam.Value = denumire; 
cmd.Parameters.Add(numeParam); 

SqlCeParameter idRAParam = new SqlCeParameter("@id_ra", SqlDbType.Int); 
idRAParam.Value = idRA; 
cmd.Parameters.Add(idRAParam); 

cmd.Prepare(); 
cmd.ExecuteNonQuery(); 
cmd.Dispose(); 
conn.Close(); 

這不工作了:

conn = getConnection(); 
conn.Open(); 

SqlCeCommand cmd = conn.CreateCommand(); 

cmd.CommandText = "INSERT INTO ra_active ([denumire],[gestiune],[utilizator],[tip_activ],[nr_invetar],[categorie_activ],[patrimoniu],[id_ra]) Values(@denumire,@gestiune,@utilizator,@tip_activ,@nr_invetar,@categorie_activ,@patrimoniu,@id_ra)"; 

SqlCeParameter numeParam = new SqlCeParameter("@denumire", SqlDbType.NVarChar, 100); 
numeParam.Value = denumire; 
cmd.Parameters.Add(numeParam); 

SqlCeParameter gestiuneParam = new SqlCeParameter("@gestiune", SqlDbType.Int); 
gestiuneParam.Value = gestiune; 
cmd.Parameters.Add(gestiuneParam); 

SqlCeParameter utilizatorParam = new SqlCeParameter("@utilizator", SqlDbType.Int); 
utilizatorParam.Value = utilizator; 
cmd.Parameters.Add(utilizatorParam); 

SqlCeParameter nrInventarParam = new SqlCeParameter("@nr_inventar", SqlDbType.NVarChar); 
nrInventarParam.Value = nrInventar; 
cmd.Parameters.Add(nrInventarParam); 

SqlCeParameter categorieActivParam = new SqlCeParameter("@categorie_activ", SqlDbType.NVarChar); 
categorieActivParam.Value = categorieActiv; 
cmd.Parameters.Add(categorieActivParam); 

SqlCeParameter patrimoniuParam = new SqlCeParameter("@patrimoniu", SqlDbType.Int); 
patrimoniuParam.Value = patrimoniu; 
cmd.Parameters.Add(patrimoniuParam); 

SqlCeParameter tipActivParam = new SqlCeParameter("@tip_activ", SqlDbType.Int); 
tipActivParam.Value = tipActiv; 
cmd.Parameters.Add(tipActivParam); 

SqlCeParameter idRAParam = new SqlCeParameter("@id_ra", SqlDbType.Int); 
idRAParam.Value = idRA; 
cmd.Parameters.Add(idRAParam); 

cmd.Prepare(); 
cmd.ExecuteNonQuery(); 
cmd.Dispose(); 
conn.Close(); 

我得到這個異常:

列名無效[節點名稱(如果有的話)=,列名= gestiune]

發生這種情況是因爲它試圖插入上一個表(從前面的準備語句中)。這是瘋了,我還沒有找到任何解決辦法。

+0

是什麼讓你如此確定它試圖插入到前面的表中?你是否檢查過拼寫等,並確認'gestiune'列*肯定存在於'ra_active'表中? – James

+0

我刪除了除第一個參數以外的所有內容,執行並在第一個表中找到了數據(在兩個表中都找到了'denumire'列)。 – foobaz256

+0

我發現這種行爲真的很奇怪,因爲你正在創建一個新的命令對象,它不像你重新使用舊的命令對象。你可以在整個代碼中顯示代碼嗎? (顯然不是完整的應用程序,只是在這兩個部分生活的地方)。我很感興趣,看看是否有與代碼重疊。 – James

回答

0

我看到的是參數@nr_inventar不存在於您的命令文本中(您有@nr_invetar那裏)。另外,如果您確實需要在執行之前準備好命令,則應該爲所有nvarchar參數設置一個大小,就像您爲@opardire所做的一樣。

+0

thx打字錯誤檢測,但這不是問題 – foobaz256

+0

其實我沒有準備好這些語句,一切正常,沒有更多的例外和數據被插入。 GG和thx(真正的問題是:爲什麼當這些陳述準備好時,它的行爲如何?) – foobaz256