내가 문자열을 반환하는 함수를 만들고 싶어 값을 반환합니다. 문제는 while()
뒤에 리턴을 넣지 않으면 모든 코드가 값을 반환하지 않는다는 것입니다. 그러나 데이터가 들어있는 변수 lienBaseConnaissance
이 필요하며 질문에서 변수가 더 이상 필요하지 않은 값을 가지고 있습니다.DataReader를, 모든 경로는
답변
문제는 while
-loop입니다. if
이 아니므로 행이 없으면 루프가 입력되지 않을 수도 있습니다.
가장 간단한 해결책은 반환 변수에 기본 값을 할당하는 것입니다 이후
string lienBaseConnaissance = null;
// .... at the end of the method:
return lienBaseConnaissance;
(난 가정)이 단일 값을 읽는 것도 가능합니다 :
if(_ReaderLines.Read())
{
if (!_ReaderLines.IsDbNull("ParStrP1"))
{
lienBaseConnaissance = _ReaderLines.GetString("ParStrP1");
return lienBaseConnaissance;
}
else
{
return null;
}
}
else
return null;
참고using
- 문구를 사용하여 관리되지 않는 리소스가 삭제되었는지 확인하십시오 (예 : 연결이 끊어짐). IDisposable
을 구현하는 모든 것, 즉 연결, 명령 및 판독기에 사용하십시오.
나는 그것에 대해 생각하고 있었지만 루프를 빠져 나오면 변수 lienBaseConnaissance의 값이 null이되고 데이터가 아닐 것이라고 생각했습니다. 사실 나는 그것을 시도하고 그것을 작동하므로 정말 고마워! –
@HubertSolecki : SP에 대한 정보, SP가 반환하는 정보, 매개 변수 (예 : 기본 키)는 무엇입니까? –
_ReaderLines.Read()
이 루프의 첫 번째 반복에서 false를 반환하면 while 루프를 입력하지 않기 때문에 반환 값없이 메소드가 빠져 나옵니다.
string lienBaseConnaissance = null;
SqlDataReader _ReaderLines = RequeteExiste.ExecuteReader();
if(_ReaderLines.Read())
{
if (_ReaderLines["ParStrP1"].ToString() != null)
lienBaseConnaissance = _ReaderLines["ParStrP1"].ToString();
}
cnx.Close();
return lienBaseConnaissance;
의 끝에서 반환 지점에 떨어질 경우 어떤 때문에, _ReaderLines.Read()
false를 반환 한 후 코드 실행 실 거예요 while 루프를 입력 말할 수 있습니다 복귀 경로가 뒤 따른다.
cnx.Close();
문 다음에 return 문을 추가해야합니다.
뭔가 나는 또한
뭔가 같이도록 SqlConnection에 대한 using Statement보고 권 해드립니다 것이다
public string LienBaseDeConnaissance(string entreprise)
{
SqlConnection cnx = new SqlConnection("Data Source=SR8-ICARE-SQL;Initial Catalog=db_GENAPI_CM;User Id='IcareReader';Password='$Genapi.Reader1$';");
...
SqlDataReader _ReaderLines = RequeteExiste.ExecuteReader();
while (_ReaderLines.Read())
{
if (_ReaderLines["ParStrP1"].ToString() != null)
{
lienBaseConnaissance = _ReaderLines["ParStrP1"].ToString();
return lienBaseConnaissance;
}
else
{
return null;
}
}
cnx.Close();
return null; //this line here
}
같은
public string LienBaseDeConnaissance(string entreprise)
{
using(SqlConnection cnx = new SqlConnection("Data Source=SR8-ICARE-SQL;Initial Catalog=db_GENAPI_CM;User Id='IcareReader';Password='$Genapi.Reader1$';"))
{
...
SqlDataReader _ReaderLines = RequeteExiste.ExecuteReader();
...
}
return null;
}
답변 주셔서 감사합니다, 그것에 대해 생각합니다! –
첫 번째 줄은 대상 변수를 포함하지 않는 경우, 함수 것 null를 돌려줍니다. 대신 while 루프 이후로 return null을 이동하려고하므로 대상 변수가 전혀 발견되지 않는 경우에만 발생합니다.
Offtopic : 'while'루프 안의'return' 문 중 하나가 눌려지면 절대로 cnx.Close()를하지 않을 것입니다. ['using' 블록 안에 'SqlConnection'을 선언하여이 문제를 해결할 수 있습니다 (http://msdn.microsoft.com/en-us/library/yh598w02(v=80) .aspx). – GolfWolf
@ w0lf 그리고 'SqlDataReader'도 마찬가지입니다. 사실, 메서드의 거의 모든 데이터 액세스 개체. – shambulator