2012-06-15 11 views
16

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.OracleCommand SQL Parámetros Enlace

¿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 aún no lo corrige.

Respuesta

52

Retire comillas simples @ 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: Using Parameters

+0

Eso devuelve un error de expresión faltante ORA-00936. Eso es un varchar en la base de datos, entonces debería tener '', supongo. –

+0

@RyanSammut, verifique mi respuesta actualizada, y el enlace que he publicado – Habib

+1

Puede ser que ayude: http: // stackoverflow.com/questions/7316850/ora-00936-missing-expression-when-reading-from-database-with-dotconnect-driver. –

-3

Usted necesita tener la "@ "símbolo:

oraCommand.Parameters.Add(new OracleParameter("@userName", domainUser)); 
+0

Lo he intentado, eso no parece ser el problema –

+0

Downvoter, ¿me gustaría comentar? – Arran

+3

No soy el infractor, pero al agregar el parámetro al comando, no necesita poner el carácter vinculante. Además, el carácter vinculante en Oracle es ':' not '@' - este símbolo va en la consulta misma. –

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

Oracle tiene una sintaxis diferente para los parámetros que Sql-Server. Así que utilice: 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(); 
    } 
} 

Al utilizar parámetros con nombre en una OracleCommand que debe preceder el nombre del parámetro con dos puntos (:).

http://msdn.microsoft.com/en-us/library/system.data.oracleclient.oraclecommand.parameters.aspx

0

// PT: Eu mesmo tivo Este Problema ao Como utilizar o espacio de nombres Oracle.DataAccess.Client;

// ES: have this mismo problema when use the Namespace Oracle.DataAccess.Client;

// ES: Tuve el mismo problema al utilizar el espacio de nombres Oracle.DataAccess.Client;

// PT: Eu resolvi desta forma:

// ES: Él Resuelto of this Manera:

// ES: He resuelto de esta manera

usando 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 
} 
Cuestiones relacionadas