Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 不管发生什么情况,SQL Server CE都会执行相同的预处理语句_C#_Sql Server Ce - Fatal编程技术网

C# 不管发生什么情况,SQL Server CE都会执行相同的预处理语句

C# 不管发生什么情况,SQL Server CE都会执行相同的预处理语句,c#,sql-server-ce,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)"; SqlCeParam

我正在尝试将一些从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]


之所以会发生这种情况,是因为它试图在上一个表中插入(来自上一个准备好的语句)。这太疯狂了,我还没有找到任何解决办法。

我看到的是,命令文本中不存在参数@nr\u inventar(这里有@nr\u invetar)。另外,如果您确实需要在执行之前准备命令,那么应该为所有nvarchar参数设置一个大小,就像您为@denumire所做的那样。

是什么让您如此确定它试图插入到上一个表中?您是否检查了拼写等,并确认
gra_active
表中肯定存在
gestiune
列?我删除了除第一个参数以外的所有参数,执行并在第一个表中找到了数据(两个表中都有
denumire
列).我发现这种行为非常奇怪,因为您正在创建一个新的命令对象,而不是在使用旧的命令对象。你能完整地展示代码吗?(显然不是完整的应用程序,只是这两个部分所在的地方)。我很想看看代码是否有任何重叠。似乎我不能粘贴这么多代码,这两段代码是两种不同的方法。实际上我不再准备语句,一切都正常,不再有异常,数据被插入。GG和thx(真正的问题是:为什么在准备声明时它会这样做?!)