string sql = "Select UserId From User where UserName='Gheorghe'";
SqlCommand cmd=new SqlCommand(sql, connection);
cmd.ExecuteScalar(); //this statement return 0
しかし、私はユーザーのIDを取得したいですか? どうすれば入手できますか?
が必要ですSqlDataReader
。
SqlDataReader SQL Server データベースから前方のみの行ストリームを読み取る方法を提供します。
string sql = "Select UserId From User where UserName='Gheorghe'";
SqlCommand cmd=new SqlCommand(sql, connection);
SqlDataReader rd = cmd.ExecuteReader();
if (rd.HasRows) {
rd.Read(); // read first row
var userId = rd.GetInt32(0);
}
戻り値をキャストするだけです。
int userId = (Int32)cmd.ExecuteScalar();
ただし、クエリが空の結果セットを返す場合、 ExecuteScalarはnullを返すことに注意してください。その場合、上記のコード スニペットはInvalidCastExceptionをスローします。
try with select TOP 1 and ExecuteScalar
string sql = "Select TOP 1 UserId From User where UserName='Gheorghe'";
using (SqlConnection conn = new SqlConnection(connString))
{
conn.Open();
using(SqlCommand cmd = new SqlCommand(sql, conn))
{
var result = (Int32)cmd.ExecuteScalar();
}
}