C#ORA-01008:并非所有变量都绑定错误

问题描述 投票:1回答:4

我是第一次使用C#,现在我尝试将数据从变量插入oracle db。但是我得到了这个错误。我不知道此源代码中的要点。

    public class Foo
    {
        public string PLANTCODE { get; set; }
        public string LOCATIONCODE { get; set; }
        public string LOCATIONNAME { get; set; }
        public string LOCATIONSTATUS { get; set; }
        public string DEPARTMENTCODE { get; set; }
        public string DEPARTMENTNAME { get; set; }
      //  public DateTime LASTUPDATED { get; set; }
       // public OracleDbType OracleDbType { get; set; }

    }
    public List<Foo> GetData()
    {
        List<Foo> dataList = new List<Foo>();
        string connectionString = "Data Source=xxx; Initial Catalog=xxx;Integrated Security = false; User ID=xxx;Password=xxx";
        string selectStatement = "SELECT PLANTCODE,LOCATIONCODE,LOCATIONNAME,LOCATIONSTATUS,DEPARTMENTCODE,DEPARTMENTNAME from V_Location";

        using (var con = new SqlConnection(connectionString))
        {
            using (var cmd = new SqlCommand(selectStatement, con))
            {
                con.Open();

                using (var reader = cmd.ExecuteReader())
                { if (reader.Read())

                        {
                            dataList.Add(new Foo
                            {
                                PLANTCODE = reader.GetString(0),
                                LOCATIONCODE = reader.GetString(1),
                                LOCATIONNAME = reader.GetString(2),
                                LOCATIONSTATUS = reader.GetString(3),
                                DEPARTMENTCODE = reader.GetString(4),
                                DEPARTMENTNAME = reader.GetString(5),
                            });
                        }
                 }
            }
        }
        return dataList;
    }
    public void InsertData()
    {


        string connectionString = "Provider=MSDAORA;Data Source=ORCL;Persist Security Info=True;User ID=xxx;Password=xxx;Unicode=True";
        string insertStatment = "INSERT INTO xxx.BTH_V_LOCATION (PLANTCODE, LOCATIONCODE, LOCATIONNAME, LOCATIONSTATUS, DEPARTMENTCODE, DEPARTMENTNAME) VALUES (:PLANTCODE, :LOCATIONCODE, :LOCATIONNAME, :LOCATIONSTATUS, :DEPARTMENTCODE, :DEPARTMENTNAME)";


        List<Foo> dataList = GetData();

        if (dataList.Count > 0)
        {
            using (OleDbConnection con = new OleDbConnection(connectionString))
            {

                    using (OleDbCommand cmd = new OleDbCommand(insertStatment, con))
                    {
                        con.Open();
                        foreach (var items in dataList)
                        {


                            cmd.Parameters.Clear();
                            cmd.Parameters.Add("PLANTCODE", OleDbType.VarChar).Value = items.PLANTCODE;
                            cmd.Parameters.Add("LOCATIONCODE", OleDbType.VarChar).Value = items.LOCATIONCODE;
                            cmd.Parameters.Add("LOCATIONNAME", OleDbType.VarChar).Value = items.LOCATIONNAME;
                            cmd.Parameters.Add("LOCATIONSTATUS", OleDbType.VarChar).Value = items.LOCATIONSTATUS;
                            cmd.Parameters.Add("DEPARTMENTCODE", OleDbType.VarChar).Value = items.DEPARTMENTCODE;
                            cmd.Parameters.Add("DEPARTMENTNAME", OleDbType.VarChar).Value = items.DEPARTMENTNAME;


                        }

                        cmd.ExecuteNonQuery();
                    }

            }
        }

    }
    private void button1_Click_1(object sender, EventArgs e)
    {

        InsertData();

    }





}

}

此源代码首先从sql Server获取选择数据。之后,将数据保留在变量中以插入到oracle。现在,我尝试插入无变量,然后可以插入数据。但是如果我更改为按变量插入,但无法插入并出现此错误

ORA-01008:并非所有变量都绑定错误”在“ cmd.ExecuteNonQuery();]上”

我是第一次使用C#,现在我尝试将数据从变量插入oracle db。但是我得到了这个错误。我不知道此源代码中的要点。公共类Foo {公共字符串...

c# oracle
4个回答
0
投票

移动cmd.Parameters.clear();在循环之外。


0
投票

非常感谢您的回答,但是我尝试移动cmd.Parameters.clear();。 ,我仍然遇到相同的错误。


0
投票

现在我可以解决此问题,将参数名称更改为“?”


0
投票

我认为您需要使用@而不是:作为参数。并且您需要在循环内执行并在执行后清除参数。

© www.soinside.com 2019 - 2024. All rights reserved.