Как передать параметры в MySQL OdbcCommand и только Как обновить только в случае совпадения предиката? - PullRequest
2 голосов
/ 02 ноября 2011

Вопрос 1 - Как правильно передать параметры в MySQL OdbcCommand?

Я новичок в MYSQL.

Я хочу написать запрос на обновление. Я написал так, но он не работает.

private int UpdateUser(ClsUserRegistrationProp ObjUserProp, int IntUesrId)
{
    Int32 Isdone;
    using (OdbcConnection con = new OdbcConnection(ConnStr))
    using (OdbcCommand cmd = new OdbcCommand("UPDATE tblUsers SET FirstName = ?, LastName = ?,UserName = ?,Password = ?,EmailId = ? where UserId= ?", con))
    {
        cmd.CommandType = CommandType.Text;
        cmd.CommandTimeout = 0;

        cmd.Parameters.Add("@UserId", OdbcType.Int).Value = IntUesrId;
        cmd.Parameters.Add("@FirstName", OdbcType.VarChar, 255).Value = ObjUserProp.FirstName;
        cmd.Parameters.Add("@LastName", OdbcType.VarChar, 255).Value = ObjUserProp.LastName;
        cmd.Parameters.Add("@UserName", OdbcType.VarChar, 255).Value = ObjUserProp.UserName;
        cmd.Parameters.Add("@Password", OdbcType.VarChar, 255).Value = ObjUserProp.Password;
        cmd.Parameters.Add("@EmailId", OdbcType.VarChar, 255).Value = ObjUserProp.EmailId;

        con.Open();

        Isdone=cmd.ExecuteNonQuery();            
        con.Close();
        return Isdone;




    }
}

Вопрос 2. Как обновить запись, только если имя пользователя или адрес электронной почты совпадают?

Также я хочу проверить, что имя пользователя и адрес электронной почты уже существуют или нет. Если они не существуют тогда и только тогда, запись обновится

Как я могу это сделать? Пожалуйста, помогите ... !!!

Ответы [ 2 ]

0 голосов
/ 02 ноября 2011

Вам нужно что-то вроде:

UPDATE tblUsers 
SET FirstName = @Firstname, LastName = @LastName,UserName = @UserName,Password = @Password,EmailId = @EmailId
WHERE UserId= @userId AND NOT EXISTS (
    SELECT * FROM tblUsers WHERE UserName=@UserName AND EmailId=@EmailId 
 )
0 голосов
/ 02 ноября 2011

Параметры

Если вы используете ODBC, вы должны назвать свои переменные @xyz, поэтому

UPDATE tblUsers SET FirstName = @FirstName, ... WHERE xyz

и добавьте параметры, подобные этому

cmd.Parameters.Add("@FirstName", ...)

Просто для полноты, если вы используете коннекторы MySQL, SQL должен читать

UPDATE tblUsers SET FirstName = ?FirstName, ... WHERE xyz

и добавьте параметры, подобные этому (без '?'!)

cmd.Parameters.Add("FirstName", ...)

Имя пользователя, проверка электронной почты

Основной подход заключается в том, чтобы выполнить SELECT для имени пользователя и / или электронной почты, а затем выполнять обновление только в том случае, если это не дает результатов, но там вы можете сделать это одним оператором, подобным следующему:

UPDATE tblUsers SET ... WHERE UserId= @userId AND Email = @Email AND UserName = @UserName

Таким образом, обновление будет работать только в том случае, если адрес электронной почты и имя пользователя совпадают с указанными в параметрах.

Затем вы можете использовать int из ExecuteNonQuery, чтобы проверить, была ли запись изменена (результат> 0) или ничего не было изменено (результат = 0). Если ничего не было изменено, то адрес электронной почты и имя пользователя не совпадали. (Предупреждение: если вы введете неправильный идентификатор пользователя, это также вернет результат = 0!)

НТН Alex

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...