OracleCommand SQL 매개 변수 바인딩
아래 파라미터의 바인딩에 문제가 있습니다.파라미터를 사용하지 않고 테스트했기 때문에 접속이 동작합니다.그러나 실행 전 쿼리 값은 'jsmith' 대신 '@userName'을 사용합니다.
뭐가 문제죠?이게 제본하는 방법이 아닌가요?
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 기사를 참조해 주세요.http://msdn.microsoft.com/en-us/library/system.data.oracleclient.oraclecommand.parameters%28v=vs.100%29.aspx
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();
여기 같은 문제를 해결한 방법이 있습니다.Oracle.DataAccess.Client
네임스페이스
using 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
}
언급URL : https://stackoverflow.com/questions/11048910/oraclecommand-sql-parameters-binding
'sourcetip' 카테고리의 다른 글
H2 데이터베이스 콘솔 스프링 부팅 로드가 X-Frame-Options에 의해 거부되었습니다. (0) | 2023.03.04 |
---|---|
대응: 스테이트리스 기능 컴포넌트의 PropType (0) | 2023.03.04 |
내장된 Tomcat의 액세스 로그를 stdout으로 전송하도록 Spring Boot에 어떻게 지시합니까? (0) | 2023.03.04 |
PL/SQL 예외 처리: 아무것도 하지 않음(예외 무시) (0) | 2023.03.04 |
AngularJS의 동일한 요소에 두 개의 지시어를 내포하는 방법은 무엇입니까? (0) | 2023.03.04 |