使用C#WPF

问题描述

我的目标是将数据添加到Oracle数据库。我已经在此链接https://youtu.be/LUKp76CNmJY)上尝试过该教程,这对初学者很有帮助。但是INSERT不起作用(DELETE也不起作用)。但是,更新有效。使用典型的人力资源帐户。是否在app.config中指定某种排序方式?我不知道。(更新有效,这意味着成功连接并且将更新授予HR。)

部分代码如下。

app.config

...
<connectionStrings>
        <add name="myConnectionString" connectionString="DATA SOURCE=ORCL;PASSWORD=Oracle11;USER ID=HR"
            providerName="Oracle.ManagedDataAccess.Client" />
    </connectionStrings>
...

CS文件

...
        private void updateDataGrid()  //SELECT statement isuued.
        {
            OracleCommand cmd = con.CreateCommand();
            cmd.CommandText = "SELECT EMPLOYEE_ID,LAST_NAME,JOB_ID,HIRE_DATE,EMAIL FROM EMPLOYEES";
            cmd.CommandType = CommandType.Text;
            OracleDataReader dr = cmd.ExecuteReader();
            DataTable dt = new DataTable();
            dt.Load(dr);
            myDataGrid.ItemsSource = dt.defaultview;
            dr.Close();
        }
        private void setConnection() //Getting connection.
        {
            string connectionString = ConfigurationManager.ConnectionStrings["myConnectionString"].ConnectionString;
            con = new OracleConnection(connectionString);
            try
            { con.open(); } catch (Exception exp) { }
        }
        private void Window_Loaded(object sender,RoutedEventArgs e)
        {   this.updateDataGrid();  }

...


        private void add_btn_Click(object sender,RoutedEventArgs e)  //Event listner. 
        {
            string sql = "INSERT INTO EMPLOYEES(EMPLOYEE_ID,EMAIL,JOB_ID)" +
                "VALUES(:EMPLOYEE_ID,:LAST_NAME,:EMAIL,:HIRE_DATE,:JOB_ID)";
            this.AUD(sql,0);
            ...
        }

      
...
        private void AUD(string sql_stmt,int state)  // Making Oracle statement string
        {
            string msg = "";
            OracleCommand cmd = con.CreateCommand();
            cmd.CommandText = sql_stmt;
            cmd.CommandType = CommandType.Text;

            switch (state)
            {
                case 0:
                    msg = "Row Inserted Successfully!";
                    cmd.Parameters.Add("EMPLOYEE_ID",OracleDbType.Int32,6).Value = Int32.Parse(employee_id_txtbx.Text);
                    cmd.Parameters.Add("LAST_NAME",OracleDbType.Varchar2,25).Value = last_name_txtbx.Text;
                    cmd.Parameters.Add("EMAIL",25).Value = email_txtbx.Text;
                    cmd.Parameters.Add("HIRE_DATE",OracleDbType.Date,7).Value = hire_date_picker.SelectedDate;
                    cmd.Parameters.Add("JOB_ID",10).Value = job_id_txtbx.Text;
                    break;
               ...
            }
            try
            {
                int n = cmd.ExecuteNonQuery();
                if (n > 0)
                {
                    MessageBox.Show(msg);
                    this.updateDataGrid();
                }
            }
            catch (Exception expe) { };
        }

 ...

解决方法

我没有得到HR的架构。 JOB_ID列为FK。因此,当以JOB_ID输入到文本框时,不应随意输入JOB_ID。 例如, 插入EMPLOYEES(EMPLOYEE_ID,LAST_NAME,EMAIL,HIRE_DATE,JOB_ID)VALUES(90,'ss','sss','2020-10-09','sssss'); -不! 插入EMPLOYEES(EMPLOYEE_ID,LAST_NAME,EMAIL,HIRE_DATE,JOB_ID)VALUES(90,'ss','sss','2020-10-09','AD_PRES'); -确定