Вопрос по oracle, c#, system.data.oracleclient – Связывание параметров OracleCommand SQL

23

У меня проблема с привязкой нижеуказанного параметра. Соединение работает, потому что я проверил его без использования параметров. Тем не менее, значение запроса перед его выполнением все еще использует «@ 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;
}

РЕДАКТИРОВАТЬ: я добавил @ к имени поля параметра, но это по-прежнему не исправить.

Ваш Ответ

6   ответов
0

// PT: эффективная проблема, связанная с использованием пространства имен o Oracle..Client;

// ES: десять сложных проблем, связанных с использованием пространства имен Oracle..Client;

// EN: у меня была такая же проблема при использовании пространства имен Oracle..Client;

// PT: Eu resolvi desta forma:

// ES: Resuelto de esta manera:

// EN: я решил это так

использование Oracle..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
}
66

Remove single quotes around @username, и в отношении использования оракула: с именем параметра вместо@, лайк:

SELECT fullname FROM sup_sys.user_profile
                           WHERE domain_user_name = :userName", db);
oraCommand.Parameters.Add(new OracleParameter("userName", domainUser));

Источник:Использование параметров

@RyanSammut, проверьте мой обновленный ответ и ссылку, которую я разместил
Это возвращает пропущенную ошибку выражения ORA-00936. Это varchar в базе данных, поэтому он должен иметь & apos; Я полагаю. Ryan S
@ Habib.OSU - версия Oracle работает отлично, спасибо! Ryan S
Может быть, это поможет:stackoverflow.com/questions/7316850/….
-3

oraCommand.Parameters.Add(new OracleParameter("@userName", domainUser));
Я пробовал это, это не кажется проблемой Ryan S
Downvoter, хотите прокомментировать?
& Quot;OracleParameter(">@<userName")& Quot; ...
Конечно, вы этого не делаете, и это нигде не подразумевается.
Я не downvoter, но при добавлении параметра в Команду вам не нужно ставить символ привязки. Кроме того, обязательный символ в Oracle: не@ - этот символ входит в сам запрос.
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();
19

чем 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

1

 OracleCommand oraCommand = new OracleCommand("SELECT fullname FROM sup_sys.user_profile
                       WHERE domain_user_name = :userName", db);

Больше можно найти в этой статье MSDN: http://msdn.microsoft.com/en-us/library/system.data.oracleclient.oraclecommand.parameters%28v=vs.100%29.aspx

Рекомендуется использовать: персонаж вместо@ для Oracle.

Похожие вопросы