[英]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
ofCommandType.Text
, you must precede the parameter name with a colon (:
) 当由一个称为SQL语句中使用命名参数OracleCommand
的CommandType.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. 作为替代方案, DataDirect和DevArt也有自己的.NET oracle提供程序。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.