Parameters.AddWithValue vs Parameters.Add?

时间:2016-03-18 13:00:37

标签: c# sql oracle11g

我使用下面的代码插入数据 首先为什么我不能使用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();
    }
}

1 个答案:

答案 0 :(得分:1)

第一个错误是由于您传递的是connstrstring)而不是connOracleConnection)。改变这个:

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

到此

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

至于第二个,OracleParameter does 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