2017-11-11 11 views
1

私はSELECT問い合わせを行うSqliteをする方法があります:私は最後のIDを挿入し得ることを試みた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 
} 

を:

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 
} 

にあなたのコードの変更は、あなたがあなたのクエリに持っているように、単一の行からひとつのカラムを取得する場合、代わりのExecuteReader

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 
} 
のは、ExecuteScalarを使用することをお勧めしていることを覚えておいてください、と言いました
+0

Thak you、hw toすべてのデータをここに返します。 'if(reader.Read()) return reader.GetString(0);'?それは列名で値を取得した後ですか? – OPV

+0

ちょうど 'return reader'ですか? – OPV

+0

この例では、0レコードまたは1レコードが返されます。 _allデータ_とはどういう意味ですか? – Steve

関連する問題