简体   繁体   English

我应该使用什么查询语法在Oracle数据库中插入记录?

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

I'm a beginner and trying to create a simple program in C# for inserting and updating records in an Oracle database. 我是初学者,并尝试在C#中创建一个简单的程序,用于在Oracle数据库中插入和更新记录。 I have managed to successfully connect to the database but I'm getting an exception for my SQL statement which states that (?) symbol is not supported. 我已成功连接到数据库,但我的SQL语句的异常表明不支持(?)符号。 Why am I getting this exception and how can I fix this? 为什么我会遇到此异常,我该如何解决这个问题?

My code is: 我的代码是:

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 { ... }
}

You need to use the named parameter for your command 您需要为命令使用命名参数

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();

As agent5566 said , and from OracleCommand.Parameters property ; 正如agent5566 所说 ,来自OracleCommand.Parameters属性 ;

When using named parameters in an SQL statement called by an OracleCommand of CommandType.Text , you must precede the parameter name with a colon ( : ) 当由一个称为SQL语句中使用命名参数OracleCommandCommandType.Text ,你必须使用一个冒号之前的参数名称( :

Use them like; 使用它们像;

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();
}

By the way, System.Data.OracleClient has been marked as deprecated in .NET 4 version. 顺便说一句, System.Data.OracleClient已在.NET 4版本中标记为已弃用。 You might wanna use Oracle Data Provider for .NET instead. 您可能希望使用Oracle Data Provider for .NET

As an alternative, DataDirect and DevArt also have their own oracle providers for .NET. 作为替代方案, DataDirectDevArt也有自己的.NET oracle提供程序。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 我应该使用什么语法来更新用Oracle数据库用C#.net编写的记录 - What syntax should I use to update a record written in C#.net with Oracle Database 在什么情况下我应该使用 XML 作为数据库? - In what cases should I use XML as database? 将丢失的记录从Oracle DB插入SQL Server数据库 - Inserting missing records from Oracle DB into SQL Server database 数据库说它正在插入,但是没有记录 - database says that it is inserting, but there are no records 我什么时候应该使用导航属性来查询数据库? - When should I use navigation properties to query the database? 我应该使用哪种数据库来跟踪模型铁路的运营? - What kind of database should I use for tracking operations for a model railroad? 我应该为小型dotnet应用程序使用什么数据库? - What database should I use for small dotnet Application? 需要为我的应用程序保存大量记录……我应该使用本地数据库吗? - Need to save a lot of records for my application… should I use a local database instad? 我应该使用哪个控件一个接一个地显示一组记录,而无需重新发出查询 - Which control should I use to present records from a set one after another without reissueing the query 我应该选择哪个数据库? - what database should i choose?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM