OracleCommand SQL参数绑定
我有一个与下面的参数绑定的问题。 连接工作,因为我已经testing它没有使用参数。 但是,执行前查询的值仍然使用“@userName”而不是“jsmith”。
问题是什么? 这是不是正确的方式来绕过绑定?
public static String GetFullName(String domainUser) { DataTable dT; String fullName = ""; OracleConnection db = DatabaseAdapter.GetConn(); db.Open(); OracleCommand oraCommand = new OracleCommand("SELECT fullname FROM user_profile WHERE domain_user_name = '@userName'", db); oraCommand.BindByName = true; oraCommand.Parameters.Add(new OracleParameter("@userName", domainUser)); OracleDataReader oraReader = null; oraReader = oraCommand.ExecuteReader(); if (oraReader.HasRows) { while (oraReader.Read()) { fullName = oraReader.GetString(0); } } else { return "No Rows Found"; } oraReader.Close(); db.Close(); db.Dispose(); return fullName; }
编辑:我添加@参数字段的名称,但它仍然不能解决它。
删除@username周围的单引号,并且相对于oracle使用:
使用参数名称而不是@
,如:
OracleCommand oraCommand = new OracleCommand("SELECT fullname FROM sup_sys.user_profile WHERE domain_user_name = :userName", db); oraCommand.Parameters.Add(new OracleParameter("userName", domainUser));
来源: 使用参数
Oracle对于参数的语法与Sql-Server不同。 所以使用:而不是@
using(var con=new OracleConnection(connectionString)) { con.open(); var sql = "insert into users values (:id,:name,:surname,:username)"; using(var cmd = new OracleCommand(sql,con) { OracleParameter[] parameters = new OracleParameter[] { new OracleParameter("id",1234), new OracleParameter("name","John"), new OracleParameter("surname","Doe"), new OracleParameter("username","johnd") }; cmd.Parameters.AddRange(parameters); cmd.ExecuteNonQuery(); } }
在OracleCommand中使用命名参数时,必须在参数名称前面加上冒号(:)。
http://msdn.microsoft.com/en-us/library/system.data.oracleclient.oraclecommand.parameters.aspx
你需要使用这样的东西:
OracleCommand oraCommand = new OracleCommand("SELECT fullname FROM sup_sys.user_profile WHERE domain_user_name = :userName", db);
更多可以在这个MSDN文章中find: http : //msdn.microsoft.com/en-us/library/system.data.oracleclient.oraclecommand.parameters%28v=vs.100%29.aspx
build议您使用:字符而不是@表示Oracle。
string strConn = "Data Source=ORCL134; User ID=user; Password=psd;"; System.Data.OracleClient.OracleConnection con = newSystem.Data.OracleClient.OracleConnection(strConn); con.Open(); System.Data.OracleClient.OracleCommand Cmd = new System.Data.OracleClient.OracleCommand( "SELECT * FROM TBLE_Name WHERE ColumnName_year= :year", con); //for oracle..it is :object_name and for sql it s @object_name Cmd.Parameters.Add(new System.Data.OracleClient.OracleParameter("year", (txtFinYear.Text).ToString())); System.Data.OracleClient.OracleDataAdapter da = new System.Data.OracleClient.OracleDataAdapter(Cmd); DataSet myDS = new DataSet(); da.Fill(myDS); try { lblBatch.Text = "Batch Number is : " + Convert.ToString(myDS.Tables[0].Rows[0][19]); lblBatch.ForeColor = System.Drawing.Color.Green; lblBatch.Visible = true; } catch { lblBatch.Text = "No Data Found for the Year : " + txtFinYear.Text; lblBatch.ForeColor = System.Drawing.Color.Red; lblBatch.Visible = true; } da.Dispose(); con.Close();
// PT:Eu tive este mesmo problema ao utilizar o命名空间Oracle.DataAccess.Client;
// ES:请参见参考资料命名空间Oracle.DataAccess.Client;
// EN:我有使用Oracle.DataAccess.Client命名空间的同样的问题;
// PT:Eu resolvi desta forma:
// ES:他的结果是:
// EN:我这样解决了
使用Oracle.DataAccess.Client;
string strConnection = ConfigurationManager.ConnectionStrings["oConnection"].ConnectionString; dataConnection = new OracleConnectionStringBuilder(strConnection); OracleConnection oConnection = new OracleConnection(dataConnection.ToString()); oConnection.Open(); OracleCommand tmpCommand = oConnection.CreateCommand(); tmpCommand.Parameters.Add("user", OracleDbType.Varchar2, txtUser.Text, ParameterDirection.Input); tmpCommand.CommandText = "SELECT USER, PASS FROM TB_USERS WHERE USER = :1"; try { OracleDataReader tmpReader = tmpCommand.ExecuteReader(CommandBehavior.SingleRow); if (tmpReader.HasRows) { // PT: IMPLEMENTE SEU CÓDIGO // ES: IMPLEMENTAR EL CÓDIGO // EN: IMPLEMENT YOUR CODE } } catch(Exception e) { // PT: IMPLEMENTE SEU CÓDIGO // ES: IMPLEMENTAR EL CÓDIGO // EN: IMPLEMENT YOUR CODE }
你需要有“@”符号:
oraCommand.Parameters.Add(new OracleParameter("@userName", domainUser));