【问题标题】:Parameters.AddWithValue vs Parameters.Add?Parameters.AddWithValue 与 Parameters.Add?
【发布时间】:2016-07-05 05:58:36
【问题描述】:

我正在使用以下代码插入数据 首先为什么我不能使用 Parameters.AddWithValue(); ?? 以及 Parameters.AddWithValue 和 Parameters.Add 之间的实际区别是什么????我已经进行了搜索,但每个人都说另一个已弃用,现在哪个真的已弃用?! 以及每个的命名空间是什么?据我所知,使用 Parameters.AddWithValue 是 Oracle.DataAccess;而对于Parameters.Add正在使用System.data.oracle;

第二个为什么我在这一行没有发现任何问题时遇到错误

using (OracleCommand cmd =new OracleCommand(cmdstr,connstr))

最好的重载方法匹配 'Oracle.DataAccess.Client.OracleCommand.OracleCommand(字符串, Oracle.DataAccess.Client.OracleConnection)' 有一些无效参数

参数 2:无法从 'string' 转换为 'Oracle.DataAccess.Client.OracleConnection'

Oracle.DataAccess.Client.OracleParameterCollection 不包含 'AddWithValue' 的定义并且没有扩展方法 'AddWithValue' 接受类型的第一个参数 'Oracle.DataAccess.Client.OracleParameterCollection' 可以找到 (您是否缺少 using 指令或程序集引用?)

public void connect_to_db()
{
    string connstr = "Data Source=orcl;User Id=user;Password=pwd;";
    string cmdstr = @"insert into customers 
                      set    (CUST_NAME) 
                      values (:TB_CUST_NAME);";
    using (OracleConnection conn = new OracleConnection(connstr))
    using (OracleCommand cmd =new OracleCommand(cmdstr,connstr))
    {
        conn.Open();
        cmd.Parameters.AddWithValue(":TB_CUST_NAME", TB_CUST_NAME);
        cmd.ExecuteNonQuery();
    }
}

【问题讨论】:

    标签: c# sql oracle11g


    【解决方案1】:

    第一个错误是因为您传递了connstr (string) 而不是conn (OracleConnection)。改变这个:

    using (OracleCommand cmd =new OracleCommand(cmdstr,connstr))
    

    到这里

    using (OracleCommand cmd =new OracleCommand(cmdstr,conn))
    

    至于第二个,OracleParameterdoes not seem to need:。使用示例:

    OracleCommand oraCommand = new OracleCommand("SELECT fullname FROM sup_sys.user_profile
                               WHERE domain_user_name = :userName", db);
    oraCommand.Parameters.Add(new OracleParameter("userName", domainUser));
    

    Oracle.DataAccess.ClientSystem.Data.OracleClient 之间似乎存在差异。 OracleParameterCollection.AddWithValue 似乎存在于 System.Data.OracleClient 中。但是你使用Oracle.DataAccess.Client

    【讨论】:

    • :TB_CUST_NAME 是我要检索其数据并将其插入表中的文本框的名称,因此我没有使用 select 我正在使用 insert into 并且我指向了我想要的文本框名称从获取价值
    • @samer 请注意,您在 cmdstr (OracleCommand) 中这样做(有 :),而在 OracleParameter 中却没有这样做
    • 我现在使用这种方式,但出现错误 ORA-00911: invalid character cmd.Parameters.Add(new OracleParameter(":userName", textboxuserName.Text));
    • 同样,OracleParameter 不需要 :。它仅适用于 OracleCommand。尝试删除:在 OracleParameter
    猜你喜欢
    • 2012-02-27
    • 2012-04-17
    • 2013-06-23
    • 2021-02-13
    • 1970-01-01
    • 1970-01-01
    • 2012-03-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多