我想在我的数据库中插入多行,我尝试使用参数但是我做错了。
在调试模式下,参数确实有值,但插入完成后,我的数据库中仍然有@compte
,@mo
,@userimp
而不是它们的值。
string INSERTDELAMORTPart2 = "'123'," + "'@compte'" + "," + "'@mo'" + "," + "'ubs'" + "," + "'2'" + "," + "'@userimp'" + "," + "'22.10.17'" + ",'";
OdbcCommand Query = new OdbcCommand(INSERTDELAMORTPart2, InfoConnexion);
Query.Parameters.AddWithValue("@compte", _cb_Compte.SelectedItem);
Query.Parameters.AddWithValue("@mo", MondantResultat);
Query.Parameters.AddWithValue("@userimp", UserImp);
Query.ExecuteNonQuery();
我已尝试过Parameters.Add
,还有Parameters["@name"].Value
,但结果保持不变。
我做错了什么?
编辑:
我有一个Oracle数据库,我需要单引号来插入我的值。 我试图将我的整个INSERT字符串传递给参数,但它不起作用。
我即将放弃,只需将'
替换为''
,即使这是一个坏主意。
答案 0 :(得分:2)
该命令应如下所示:
insert into t(compte, mo, userimp) -- of course the table and columns should be the right names
values (@compte, @mo, @userimp);
不需要单引号。
我建议不要使用AddWithValue()
。相反,要明确类型。
答案 1 :(得分:2)
一些事情。
如果您使用的是Oracle,我强烈建议您使用ODP.net或托管ODP.net,而不是ODBC。 ODBC 应该工作,但本机驱动程序将更有效地工作,并将避免使用ODBC提供的抽象层时可能遇到的任何奇怪之处。托管ODP.net的另一个优势是不需要在目标计算机上安装Oracle客户端
SQL Server(和其他数据库)使用" @"作为参数,但Oracle使用冒号":"代替。一些数据库(如PostgreSQL)将采用其中一种。虽然SQL中的参数需要冒号,但在.NET中使用赋值参数时,需要省略它。同样,这是Oracle在其他数据库中找不到的东西。
您的SQL似乎没有任何命令...只有值。你的"插入到哪里?"
特别是对于Oracle,您希望明确您的数据类型...因此请使用Add
而不是AddWithValue
(实际上是ODP中Add
的重载。净)。或者,您可以稍后设置数据类型。
转换后的代码看起来像这样:
string insert = "insert into my_table values (:COMPTE, :MO, :USERIMP)";
using (OracleCommand cmd = new OracleCommand(insert, Connection))
{
// no ":" in the parameter declarations
cmd.Parameters.Add(new OracleParameter("COMPTE", OracleDbType.Int32));
cmd.Parameters.Add(new OracleParameter("MO", OracleDbType.Varchar2));
cmd.Parameters.Add(new OracleParameter("USERIMP", OracleDbType.Varchar2));
cmd.Parameters[0].Value = 123;
cmd.Parameters[1].Value = "ubs";
cmd.Parameters[2].Value = "22.10.17";
cmd.ExecuteNonQuery();
}
我猜测你的数据类型 - 确保它们在实际实现时与你的DDL匹配,如果这些不是唯一的三列,请适当更新你的插入命令。
如果由于某种原因我误解了,而这不是Oracle,我仍然建议使用本机驱动程序而不是ODBC。当你使用ODBC时,你会对目标机器有很多假设 - 假设可能不是真的。
答案 2 :(得分:1)
你有这个:
string INSERTDELAMORTPart2 = "'123'," + "'@compte'" ...
请注意参数名称周围的单引号。他们不应该在那里。你想要这个:
string INSERTDELAMORTPart2 = "'123'," + "@compte"