C# 无法设置OracleCommand.BindByName=true

C# 无法设置OracleCommand.BindByName=true,c#,.net,oracle,C#,.net,Oracle,我升级到Oracle 12.1,从那时起,我的OracleCommand就不起作用了。我正在传递cmd.Parameters[Name].Value=username这样的参数;但获取异常的消息envlink:System.IndexOutOfRangeException:Invalid index-1对于此计数为0的OracleParameterCollection无效。我做了一些搜索,找到了OracleCommand.BindByName=true,但找不到方法BindByName。我正在使

我升级到Oracle 12.1,从那时起,我的OracleCommand就不起作用了。我正在传递cmd.Parameters[Name].Value=username这样的参数;但获取异常的消息envlink:System.IndexOutOfRangeException:Invalid index-1对于此计数为0的OracleParameterCollection无效。我做了一些搜索,找到了OracleCommand.BindByName=true,但找不到方法BindByName。我正在使用System.Data.OracleClient版本4.0.0.0。 如何解决这个问题?

那么,参数就是集合。若您试图按键获取元素,但该元素不存在,那个么您将得到一个无效的索引异常,您应该在尝试访问具有该名称的元素之前添加一个参数。集合参数包含方法AddWithtValue-

例如System.Data.OracleClient:

但是System.Data.OraceClient已弃用,Microsoft将不支持它。在中,您可以使用函数add来添加参数,而不是使用函数AddWithtValue在System.Data.OracleClient中添加参数的方式:

例如ODP.Net:


使用cmd.Parameters.AddWithValueName、用户名更新;但是,在调用“ProcedureName”时遇到异常,如ORA-06550:第1行第7列:PLS-00306:错误的参数数量或类型ORA-06550:第1行第7列:PL/SQL:语句ignored@Lara,我添加了如何使用参数的示例。如果代码无效,请显示代码。我正在尝试打开connectionstring,如conn=new OracleConnection\u conn;康涅狄格开放大学;但是获取OracleConnection.ConnectionString之类的异常是无效的。如何解决此问题?您应该设置正确的ConnectionString。有关如何构建它的更多信息,请参阅。省略tnsnames.ora也可以很好地工作。
cmd.Parameters.AddWithValue("Name", username);
        var con = new OracleConnection(source);
        using (con)
        {
            con.Open();
            using (var cmd = con.CreateCommand())
            {
                cmd.CommandText = "SELECT :NAME FROM dual";
                cmd.CommandType = System.Data.CommandType.Text;
                cmd.Parameters.AddWithValue("NAME", "Hello World!");

                using (var rdr = cmd.ExecuteReader())
                {
                    while (rdr.Read())
                    {
                        string val = rdr.GetString(0);
                        MessageBox.Show(val);
                    }
                }
            }
        }
cmd.Parameters.Add("Name", username);
cmd.Parameters.Add(
   new OracleParameter("Name", OracleDbType.Varchar2, username, ParameterDirection.Input)
);
        using (OracleConnection con = new OracleConnection(source))
        {
            con.Open();
            using (var cmd = con.CreateCommand())
            {
                cmd.BindByName = true;
                cmd.CommandText = "select :NAME from dual";

                cmd.Parameters.Add("NAME", "Hello World!");
                /*
                command.Parameters.Add(
                  new OracleParameter("NAME", OracleDbType.Varchar2, "Hello World!", ParameterDirection.Input)
                 );
                */

                using (var rdr = cmd.ExecuteReader())
                {
                    while (rdr.Read())
                    {
                        string val = rdr.GetString(0);
                        MessageBox.Show(val);
                    }
                }
            }
        }