问题描述
我的目标是将数据添加到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'); -确定