Я использую SQL Server Compact в своем проекте на C #. В моей базе данных есть таблица Users, которая имеет два столбца - столбец идентификатора (PRIMARY KEY) и столбец имени пользователя. Я отслеживаю различных пользователей, которые взаимодействуют с моей системой, вставляя их имя пользователя в таблицу Users.
Когда пользователь связывается с системой, я хочу записать его имя в таблицу, если его там еще нет. Очевидно, я мог бы добавить ключевое слово UNIQUE в столбец «Имя пользователя», но это означает, что мне нужно обрабатывать исключения для повторяющихся попыток ввода. Как только имя окажется в таблице - либо потому, что оно уже существует, либо мне пришлось добавить его - мне нужно получить соответствующий идентификатор.
Вот рабочий код для стрельбы.
public void GetUserId(string username)
{
using (SqlCeCommand selcmd= new SqlCeCommand(
"SELECT * FROM users WHERE username = @user", conn))
{
selcmd.Parameters.AddWithValue("@user", username);
SqlCeResultSet rs = selcmd.ExecuteResultSet(ResultSetOptions.Scrollable);
if (!rs.HasRows)
{
using (SqlCeCommand inscmd= new SqlCeCommand(
"INSERT INTO users (username) values (@user)", conn))
{
inscmd.Parameters.AddWithValue("@user", username);
inscmd.ExecuteNonQuery();
}
rs = selcmd.ExecuteResultSet(ResultSetOptions.Scrollable);
}
rs.ReadFirst();
return (rs.GetInt32(rs.GetOrdinal("id")));
}
}
Есть ли способ сделать это более эффективно?