簡體   English   中英

我應該使用什么查詢語法在Oracle數據庫中插入記錄?

[英]What query syntax should I use for inserting records in an Oracle database?

我是初學者,並嘗試在C#中創建一個簡單的程序,用於在Oracle數據庫中插入和更新記錄。 我已成功連接到數據庫,但我的SQL語句的異常表明不支持(?)符號。 為什么我會遇到此異常,我該如何解決這個問題?

我的代碼是:

private void btnSave_Click(object sender, EventArgs e)
{
    OracleConnection con = null;
    try
    {
        con = new OracleConnection();
        string constr = "Data source=XE; User ID=cloudester; Password=cloudester123;";
        if (con.State != ConnectionState.Open)
        {
            try
            {
                con.ConnectionString = constr;
                con.Open();
                //MessageBox.Show("Successfull connection");
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Exception caught");
            }
        }

        if (con.State == ConnectionState.Open)
        {
            string str = "Insert into EMP_DETAIL(EmpId, Name, Age)";
            str += "values (?,?,?)";

            OracleCommand cmd = new OracleCommand();
            cmd.CommandText = Text;
            cmd.Connection = con;
            cmd.Parameters.Add(new OracleParameter("EmpId", OracleDbType.Varchar2)).Value = txtEmpId;
            cmd.Parameters.Add(new OracleParameter("Name", OracleDbType.Varchar2)).Value = txtName;
            cmd.Parameters.Add(new OracleParameter("Age", OracleDbType.Int16)).Value = int.Parse(txtAge.Text);

            cmd.ExecuteNonQuery();
        }
    }
    catch { ... }
}

您需要為命令使用命名參數

string str = "Insert into EMP_DETAIL(EmpId, Name, Age) values (:EmpId, :Name, :Age)";
OracleCommand cmd = new OracleCommand();
cmd.CommandText = str;  //cmd.CommandText = Text; not sure why did you use Text here
cmd.Connection = con;
cmd.Parameters.Add(new OracleParameter("EmpId", OracleDbType.Varchar2)).Value = txtEmpId;
cmd.Parameters.Add(new OracleParameter("Name", OracleDbType.Varchar2)).Value = txtName;
cmd.Parameters.Add(new OracleParameter("Age", OracleDbType.Int16)).Value = int.Parse(txtAge.Text);
cmd.ExecuteNonQuery();

正如agent5566 所說 ,來自OracleCommand.Parameters屬性 ;

當由一個稱為SQL語句中使用命名參數OracleCommandCommandType.Text ,你必須使用一個冒號之前的參數名稱( :

使用它們像;

using(var con = new OracleConnection(constr))
using(var cmd = con.CreateCommand())
{
   cmd.CommandText = @"Insert into EMP_DETAIL(EmpId, Name, Age)
                       values (:EmpId, :Name, :Age)";
   cmd.Parameters.Add(new OracleParameter("EmpId", OracleDbType.Varchar2)).Value = txtEmpId;
   cmd.Parameters.Add(new OracleParameter("Name", OracleDbType.Varchar2)).Value = txtName;
   cmd.Parameters.Add(new OracleParameter("Age", OracleDbType.Int16)).Value = int.Parse(txtAge.Text);
   con.Open();
   cmd.ExecuteNonQuery();
}

順便說一句, System.Data.OracleClient已在.NET 4版本中標記為已棄用。 您可能希望使用Oracle Data Provider for .NET

作為替代方案, DataDirectDevArt也有自己的.NET oracle提供程序。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM