ошибка: команда sql неправильно завершена - PullRequest
0 голосов
/ 10 марта 2011

Я должен искать информацию о сотруднике, которая содержится в 3 таблицах. Я использовал соединения в запросе запроса, но он показывает ошибку, когда я нажимаю кнопку поиска:

sql command not properly ended

c # кодирование:

try {
  //Search Employee Details
  Oracle.DataAccess.Client.OracleConnection cn = new Oracle.DataAccess.Client.OracleConnection();

  cn.ConnectionString = "user id=system; password=system;";
  Oracle.DataAccess.Client.OracleCommand cmd = new Oracle.DataAccess.Client.OracleCommand();

  cmd.Connection = cn;
  //cn = new Oracle.DataAccess.Client.OracleConnection();
  cmd.CommandText = " select deposit.loanid, 
                             form1.empedoj, 
                             form1.empshare, 
                             sharecapital.shareint, 
                             sharecapital.loandt, 
                             sharecapital.loandeduc, 
                             sharecapital.dividend, 
                             sharecapital.sharetot 
                        from form1, 
                             deposit, 
                             sharecapital 
                       where deposit.loanid(+) = sharecapital.loanid = '" + txtlnid.Text.Trim() + "'";  // shows sql command not properly ended

  Oracle.DataAccess.Client.OracleDataAdapter ada = new Oracle.DataAccess.Client.OracleDataAdapter(cmd);
  System.Data.DataTable dt = new DataTable();
  dt.Clear();
  ada.Fill(dt);

  //Display in Textbox
  if (dt.Rows.Count > 0) {
    txtlnid.Text = dt.Rows[0].ItemArray[0].ToString();
    admdate.Text = dt.Rows[0].ItemArray[1].ToString();
    txtadmamt.Text = dt.Rows[0].ItemArray[2].ToString();
    txtadmint.Text = dt.Rows[0].ItemArray[3].ToString();
    loandt.Text = dt.Rows[0].ItemArray[4].ToString();
    txtlnamt.Text = dt.Rows[0].ItemArray[5].ToString();
    txtlnint.Text = dt.Rows[0].ItemArray[6].ToString();
    txtsctot.Text = dt.Rows[0].ItemArray[7].ToString();
  }

  if (cn.State == ConnectionState.Closed) {
    cn.Open();
  }

  string str;
  str = cmd.ExecuteScalar().ToString();

  if (str != null) {
    MessageBox.Show("Record Found");
  } else {
    MessageBox.Show("ID not Match");
  }
} catch (Exception ex) {
  MessageBox.Show(ex.Message);
}

Ответы [ 2 ]

4 голосов
/ 10 марта 2011

Ваш SQL-оператор становится

  SELECT DEPOSIT.LOANID,
         FORM1.EMPEDOJ,
         FORM1.EMPSHARE,
         SHARECAPITAL.SHAREINT,
         SHARECAPITAL.LOANDT,
         SHARECAPITAL.LOANDEDUC,
         SHARECAPITAL.DIVIDEND,
         SHARECAPITAL.SHARETOT
  FROM   FORM1, DEPOSIT, SHARECAPITAL
  WHERE  DEPOSIT.LOANID(+) = SHARECAPITAL.LOANID =    '" + txtlnid.Text.Trim() + "'";

Я подозреваю, что это должно быть:

  SELECT DEPOSIT.LOANID,
         FORM1.EMPEDOJ,
         FORM1.EMPSHARE,
         SHARECAPITAL.SHAREINT,
         SHARECAPITAL.LOANDT,
         SHARECAPITAL.LOANDEDUC,
         SHARECAPITAL.DIVIDEND,
         SHARECAPITAL.SHARETOT
  FROM   FORM1, DEPOSIT, SHARECAPITAL
  WHERE  DEPOSIT.LOANID(+) = SHARECAPITAL.LOANID 
  AND    SHARECAPITAL.LOANID = '" + txtlnid.Text.Trim() + "'";

Кроме того, у вас есть соединение с тремя таблицами без правильных условий соединения,запрос с большой вероятностью вернет декартово произведение.

0 голосов
/ 10 марта 2011

Вы пытались поставить точку с запятой в конце строки запроса?

cmd.CommandText = " select deposit.loanid, form1.empedoj, form1.empshare,
sharecapital.shareint, sharecapital.loandt, sharecapital.loandeduc, 
sharecapital.dividend, sharecapital.sharetot from form1, deposit , 
sharecapital where deposit.loanid(+) = sharecapital.loanid = '" + txtlnid.Text.Trim() + "';";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...