프로그래밍 경험 점적 동적 SQL의 결합 기교

2645 단어
흔히 볼 수 있는 오해는 다음과 같다.
1. ado만 사용net, 동적 SQL 결합을 할 수 없습니다.
2. 몇 개의 동적 매개 변수가 있는데 코드의 중복량은 이 매개 변수의 서로 다른 수량의 조합수가 되고 동적 매개 변수가 많을수록 중복량이 크다.
두 번째 질문의 경우 다음 오류 코드가 그 증거입니다.
 
  
if(id>0 && string.IsNullOrEmpty(name))
{
command.CommandText = "select * from t1 where id=?";
command.Parameters.Add(id);
}
if(id<=0 && !string.IsNullOrEmpty(name))
{
command.CommandText = "select * from t1 where name=?";
command.Parameters.Add(name);
}
if(id<=0 && !string.IsNullOrEmpty(name))
{
command.CommandText = "select * from t1 where id=? and name=?";
command.Parameters.Add(id);
command.Parameters.Add(name);
}

이 두 가지 문제는 모두 잘 해결되었으니 정확한 코드 예를 보여 드리면 됩니다.
 
  
string sql ="select * from t1 where 1=1";
if(id != null)
{
sql += " and id=?";
addParameterValue(cmd,id);
}
if(!string.IsNullOrEmpty(name))
{
sql += " and name=?";
addParameterValue(cmd,name);
}
command.CommandText = sql;

이곳의 기교는'where 1=1'을 사용하여 후속 sql 연결에서 줄마다'and'가 있어야 하는지의 문제를 교묘하게 해결했다.이'where 1=1'은 데이터베이스의 인덱스를 실행하지 않고 성능에 영향을 미친다.
매개 변수를 배열하여 조합한 다음에 각종 조합의 SQL을 쓰는 것이 이상하다.문제는 많은 초보자들이 이런 사고 습관을 가지고 있다는 것이다.본인은 컴퓨터과 출신이 아니어서 어떤 교과서인지 몰라서 그렇게 가르쳤습니다.그러나 불행하게도 이 사고방식은 잘못된 것이다.
'where 1=1'은 교과서에 없는 작은 기교이지만 매우 유용하다.
또한 프로그램에서는 일반적으로 사용자 인터페이스에서 사용자가 숫자를 입력하도록 하는데 이 숫자의 수치는 코드에서string으로 자동으로 변하고string을 int/long으로 변환하여 sql 함수로 보낸다.여기서 특히 주의해야 할 것은 많은 사람들이 특정한 수치를 '사용자가 입력하지 않은 기본값' 으로 하는데, 본고에서 처음에 쓴 오류 코드와 같다.
 
  
if(id>0 && string.IsNullOrEmpty(name))

문제는 0이 비정상적인 업무 수치인지 코드에서 알 수 없다는 점이다.프로그래머가 임의로 '사용자가 입력하지 않은 기본값' 으로 지정하는 것을 배제하지 않는다. 만약 공교롭게도 이 기본값이 실제적으로 다른 의미가 있다면 문제를 일으킬 것이다.
데이터베이스 이론에서 지정되지 않은 데이터는null로 표시되며string이든 int/long이든 상관없다.
이것은 매우 좋은 사고방식으로, 마찬가지로 이곳의 ql 조립에 사용할 수 있다.그래서 우리는 다음 코드에서 이것을 사용했다.
 
  
if(id != null)

상기 코드 중,
addParameterValue(cmd,name); 이 함수는 마지막 코드를 보다 간편하고 직관적으로 캡처하기 위해 다음 코드 세그먼트를 캡처하는 데 사용됩니다.
 
  
DbParameter p = cmd.CreateParameter();
p.ParameterName = "@XXX";
p.Value = TTT;
cmd.Parameters.Add(p);

물론 이 addParameterValue () 봉인 함수는 있어도 되고 없어도 된다.DbParameter p = cmd.CreateParameter()는 큰 문제가 없습니다.

좋은 웹페이지 즐겨찾기