data - oraclecommand c# example
Enlace de parĂ¡metros OracleCommand SQL (6)
Debes tener el símbolo "@":
oraCommand.Parameters.Add(new OracleParameter("@userName", domainUser));
Tengo un problema con el enlace del siguiente parámetro. La conexión funciona porque la he probado sin usar parámetros. Sin embargo, el valor de la consulta antes de ejecutarse sigue usando ''@userName'' en lugar de ''jsmith'', por ejemplo.
¿Cuál es el problema? ¿No es esta la manera correcta de ir por ahí?
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;
}
EDITAR: Agregué @ al nombre del campo del parámetro, pero todavía no lo corrige.
Necesitas usar algo como esto:
OracleCommand oraCommand = new OracleCommand("SELECT fullname FROM sup_sys.user_profile
WHERE domain_user_name = :userName", db);
Se puede encontrar más información en este artículo de MSDN: http://msdn.microsoft.com/en-us/library/system.data.oracleclient.oraclecommand.parameters%28v=vs.100%29.aspx
Se recomienda utilizar el carácter : en lugar de @ para Oracle.
Oracle tiene una sintaxis diferente para los parámetros que Sql-Server. Entonces use: en lugar de @
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();
}
}
Cuando use parámetros nombrados en OracleCommand, debe anteponer el nombre del parámetro con dos puntos (:).
http://msdn.microsoft.com/en-us/library/system.data.oracleclient.oraclecommand.parameters.aspx
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();
Quite comillas simples alrededor de @nombre de usuario, y con respecto al uso de Oracle :
con nombre de parámetro en lugar de @
, como:
OracleCommand oraCommand = new OracleCommand("SELECT fullname FROM sup_sys.user_profile
WHERE domain_user_name = :userName", db);
oraCommand.Parameters.Add(new OracleParameter("userName", domainUser));
Fuente: uso de parámetros
// PT: Eu tivo este mesmo problema ao o Espacio de nombres Oracle.DataAccess.Client;
// ES: este es el mismo problema cuando utiliza el espacio de nombres Oracle.DataAccess.Client;
// ES: Tuve el mismo problema al usar el espacio de nombres Oracle.DataAccess.Client;
// PT: Eu resolvi desta forma:
// ES: He resuelto de esta manera:
// ES: Lo resolví de esta manera
utilizando 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
}