gpt4 book ai didi

c# - 查询在执行时不添加参数值

转载 作者:太空宇宙 更新时间:2023-11-03 19:44:49 25 4
gpt4 key购买 nike

我想在我的数据库中插入多行,我尝试使用参数但我做错了。

在 Debug模式下,参数确实有值,但是一旦插入完成,我仍然有@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.AddParameters["@name"].Value,但结果保持不变。

我做错了什么?

编辑:

我有一个 Oracle 数据库,我需要单引号来插入我的值。我试图将我的整个 INSERT 字符串传递给一个参数,但它不起作用。

我打算放弃,只是用 '' 替换 ',即使这是个坏主意。

最佳答案

一些事情。

  1. 如果您使用的是 Oracle,我强烈建议您使用 ODP.net 或托管 ODP.net,而不是 ODBC。 ODBC 应该 可以工作,但 native 驱动程序会更有效地工作,并且会避免您使用 ODBC 提供的抽象层时可能遇到的任何奇怪情况。 Managed ODP.net 的额外优势是不需要在目标机器上安装 Oracle 客户端

  2. SQL Server(和其他数据库)使用“@”作为参数,但 Oracle 使用冒号“:”代替。一些数据库(如 PostgreSQL)将采用其中任何一种。虽然 SQL 中的参数需要冒号,但在 .NET 中使用分配参数时需要省略它。同样,这是您在其他数据库中找不到的 Oracle 特性。

  3. 您的 SQL 中似乎没有任何命令...只有值。你的“插入到哪里?”

  4. 特别是对于 Oracle,您希望明确您的数据类型...因此使用 Add 而不是 AddWithValue(这实际上是 在 ODP.net 中添加)。或者,您可以稍后设置数据类型。

转换后的代码看起来像这样:

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,我仍然建议使用 native 驱动程序而不是 ODBC。当您使用 ODBC 时,您会假设很多关于目标机器的信息——这些假设可能不会被证明是正确的。

关于c# - 查询在执行时不添加参数值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47367184/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com