无论如何,SQL Server CE都执行相同的预准备语句

时间:2014-04-22 09:39:51

标签: c# sql-server-ce

我试图将从XML文件中读取的一些数据插入到我的数据库中。问题是它只执行一个预准备语句(我定义的第一个语句),这会导致错误。

这有效:

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]

这是因为它尝试插入上一个表(来自上一个预准备语句)。这是疯了,我还没有找到解决办法。

1 个答案:

答案 0 :(得分:0)

我看到的是命令文本中没有参数@nr_inventar(你有@nr_invetar)。此外,如果您确实需要在执行前准备命令,则应为所有nvarchar参数设置大小,就像您对@denumire所做的那样。