2017-05-08 23 views
0

我想在窗口表單文本框3中傳遞兩個用戶輸入,並在文本框4中建立一個包含兩個條件的oracle命令。我不知道該怎麼做。下面是我的代碼,它不起作用。任何建議?在C#編譯oracle命令時使用了兩個條件

private void result(object sender, EventArgs e) 
    { 
     OracleParameter runNum = new OracleParameter(); 
     OracleParameter studyID = new OracleParameter(); 
     runNum.OracleDbType = OracleDbType.Decimal; 
     runNum.Value = textBox3.Text; 
     studyID.OracleDbType = OracleDbType.Decimal; 
     studyID.Value = textBox4.Text; 

     try 
     { 

      string oradb = "Data Source=("");User Id="";Password="";"; 
      OracleConnection conn = new OracleConnection(oradb); 
      conn.Open(); 
      OracleCommand cmd = new OracleCommand(); 
      cmd.Connection = conn; 

      cmd.CommandText = @"select 
            * 

           WHERE 
            condition1 = :study 
            AND condition2 = :run 
            "; 

      DataTable results = new DataTable(); 
      cmd = new OracleCommand(cmd.CommandText, conn); 

      cmd.Parameters.Add(new OracleParameter("run", runNum)); 
      cmd.Parameters.Add(new OracleParameter("study", studyID)); 

      adapter = new OracleDataAdapter(cmd); 
      adapter.ReturnProviderSpecificTypes = true; 
      OracleCommandBuilder builder = new OracleCommandBuilder(adapter); 

      adapter.Fill(results); 

      dataGridView1.DataSource = results; 
     } 
     catch 
     { 
      MessageBox.Show("No Record Found"); 
     } 
    } 

回答

0

首先在SQL * Plus或其他將執行SQL的應用程序中嘗試SQL。你需要一個FROM子句。

0

幾點建議:1)不要隱藏錯誤,你可以通過捕獲Exception並輸出其Message屬性來幫助自己一點。 2)查詢缺少一個表。它應該開始「select * from some_table」... 3)查詢使它看起來像「condition1」,「condition2」是表中的字段。更可能的是表中有一些字段叫做「run」和「study」。所以你會想「哪裏運行=:跑步和學習=:學習」。 4)嘗試使用像SQL Developer(免費)這樣的程序連接到您的數據庫,並嘗試設計您的查詢以在將它合併到C#程序之前返回您想要的內容。

+0

我弄清楚了這個問題,如果我從1個表中選擇了我的oracle評論文本,我的代碼就可以工作。 – Anna

+0

我的代碼不會工作,如果我的oracle需要加入7個表 – Anna

0

你的代碼有幾個問題:

  1. Data Source=(""):不需要括號。不過,我不知道他們是否會拋出異常或者如果它們是可選
  2. cmd.CommandText:你不指定任何表,FROM ...缺少
  3. cmd.Parameters.Add(new OracleParameter("run", runNum));:冗餘代碼,只需使用cmd.Parameters.Add("run", runNum);這也應該這樣做。
  4. cmd = new OracleCommand(cmd.CommandText, conn);相同:冗餘,只需跳過它即可。
  5. OracleCommandBuilder builder的用途是什麼?你不會在任何地方使用它。
  6. 使用catch (Exception err) { MessageBox.Show(err.Message); }來查看真正的錯誤。