2013-10-01 1 views
-1

내가 좋아하는 문자열 값에서 쿼리 문자열을 구축해야 :문자열 및? : 사업자

connString += "INSERT INTO (...) VALUES ("+ 

_cd.userName "," + 

//and there i'd like to use ?: operators: 

_cd.lastLogin == "Null" ? "null" : _cd.lastLogin "," 

그래서 내 쿼리 INSERT INTO (...) VALUES ('name', null, (...))

그러나 같을 것이다 때 임은

같이 그래서 그것이 내 문자열을 잘라 것을 사용
",null,1,2,'name', (...)"; 

글쎄, 나는 var, a, b, c, d를 사용할 수 있고, (_cd.lastLogin == "Null) a = null인지 확인하고이를 문자열에 넣을 수 있지만 많은 변수가있다.

적절한 사용 방법은 무엇입니까?

@EDIT : 코드 :

string query = "INSERT INTO PersonLogin(...) " + Environment.NewLine + 
"VALUES (" + _cD.userID + "," 
+ "'" + _cD.number + "'," 
+ "'" + _cD.dateCreate + "','" 
+ _cD.lastLogin == "Null" ? ",null," : _cD.lastLogin + "'," 
+ _cD.taken + "," 
+ _cD.canLogin + ""+ Environment.NewLine; 
+0

죄송합니다, 깜빡 - C#. – user13657

+15

적절한 방법은 SqlParameters를 사용하는 것입니다. 이런 식으로 쿼리를 작성하는 것은 광기입니다. – Arran

+3

Arran이 말한 바. 하지만 당신의 질문에 답하기 위해 아마도''모든 용도에 괄호를 써야할까요? :'. – Jon

답변

-1

? 운영자는 다음 + 연산자를 낮은 우선 순위를가집니다. 따라서 ?:의 사용을 괄호로 묶어야합니다.

connString += ... + (_cd.lastLogin == "Null" ? "null" :"'"+ _cd.lastLogin) +"'" ...; 
+2

-1 잘못된 구현 방법 제안. msm2020 답변을 참조하십시오. –

+0

@AmitRanjan 나는 이것을 제안하지 않고있다, 나는 그의 실수를 보여 주려고 노력하고있다. –

+2

나는 해결책으로 표시 할 것입니다. 제 질문에 대한 대답이기는하지만, 여러분 모두가 말했듯이, 저는 SqlCommand로 시도하려고합니다. – user13657

3
당신은 DbNull.Value

INSERT INTO (...) VALUES (@ PAR1, @ PAR2) command.Parameters.AddwithValue ("@의 PAR1"로 SqlParameter에 및 설정 값을 사용할 수 있습니다

, DbNull.Value)

+0

SqlParameters 및 Command를 사용할 수 있다는 것을 알고 있습니다. 하지만 내가 말했듯이 나는 50+ 칼럼을 가진 테이블을 가지고 있으며, 예를 들어 20/50만이 null이다. 그래서이 솔루션을 사용하면 if (value == null)과 같은 작업을 수행해야합니다. nullValue를 추가합니다. else value.value를 추가하십시오. – user13657

+0

command.parameters를 루프 할 수 있지만이 좋은 해결책이 아닙니다. 또는 + _cD.lastLogin == null ? ", null,": _cD.lastLogin + " '," – msm2020

1

문자열으로 쿼리를 구축하지만, SqlParameters를 사용하지 않는 쿼리를 만들 수있는 적절한 방법. 이것은 당신의 더 읽기 쉬운 코드를 줄 것이고 SQL injection으로부터 더 잘 보호받을 수 있습니다.