2017-11-11 8 views
1

나는 SELECT 쿼리를 만드는 SQLite는 방법이 있습니다 마지막으로 삽입sqCommand.ExecuteReader();를 사용하여 데이터를 반환하는 방법

try { 
myConn.Open(); 

using(SQLiteCommand sqCommand = new SQLiteCommand(sql, myConn)) { 
    sqCommand.CommandText = sql; 
    SQLiteDataReader reader = sqCommand.ExecuteReader(); 
    return reader.GetString(0); 
} 
} catch (Exception e) { 
// do exception handling 
} 

내가 가려고 ID :

sql = 'SELECT id FROM Pacients ORDER BY id DESC LIMIT 1'; 

내가 좋아하는 그 디에 시도 : 그것은 나를 던지고

return reader.GetString(0); 

예외 발생시 "현재 행 없음"

+0

DataReader에서 무엇인가를 가져 오기 전에 Read를 호출하고 반환 값을 확인해야합니다. false 인 경우 쿼리에서 아무 것도 반환되지 않습니다. 주변에 많은 예제가 있습니다. – Steve

+0

사실, 첫 번째 행으로 넘어 가기 위해 read를 호출해야합니다 (그리고 후속 행으로 넘어 가기 위해) –

+0

SQL 쿼리에는 많은 예제가 있지만 Sqlitre에는 그렇지 않습니다. 그걸 도울 수 있니? – OPV

답변

2

Afte r ExecuteReader를 호출하면 데이터 셋의 첫 번째 레코드에 위치하도록 Read를 호출해야합니다. Read는 true/false를 반환하여 읽을 레코드가 있는지 알려줍니다. 그래서 코드가

로 변경
try { 
myConn.Open(); 

using(SQLiteCommand sqCommand = new SQLiteCommand(sql, myConn)) { 
    sqCommand.CommandText = sql; 
    SQLiteDataReader reader = sqCommand.ExecuteReader(); 
    if(reader.Read()) 
    return reader.GetString(0); 
    else 
    return ""; // or whatever you want to return if no records are present 
} 
} catch (Exception e) { 
// do exception handling 
} 

, 당신은 당신이 당신의 질문에이 같이 하나의 행에서 한 열을 검색 할 경우 다음이 대신

try { 
myConn.Open(); 

using(SQLiteCommand sqCommand = new SQLiteCommand(sql, myConn)) { 
    sqCommand.CommandText = sql; 
    object result = sqCommand.ExecuteScalar(); 
    return result != null ? result.ToString() : ""; 
} 
} catch (Exception e) { 
// do exception handling 
} 
가 ExecuteReader

의 ExecuteScalar는를 사용하는 것이 좋습니다 것을 기억했다
+0

Thak you, hw to 모든 데이터를 여기에 반환 :'if (reader.Read()) return reader.GetString (0);'? 컬럼 이름으로 가치를 얻은 후에? – OPV

+0

그냥'return reader'입니까? – OPV

+0

귀하의 예제는 0 또는 1 개의 레코드를 반환합니다. _all 데이터로 무엇을 의미합니까? – Steve