Почему не работает это приложение базы данных C # с параметризованным sql? - PullRequest
1 голос
/ 05 января 2012

У меня есть приложение на C # с TextBox под названием ageTextBox;

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

Вот код:

private void button2_Click(object sender, EventArgs e)
    {
        // this works perfectly if I put an actual number instead of @ag
        string sql = "update persons set age = 30 where age = @ag";
        OdbcCommand cmd = new OdbcCommand(sql, conn);
        cmd.Parameters.Add("@ag", OdbcType.Int);
        cmd.Parameters["@ag"].Value = ageTextBox.Text;
        int aff = cmd.ExecuteNonQuery();
        if (aff == 0)
            MessageBox.Show("No rows afected");
        else
            MessageBox.Show("Everything went as planned");
        }
    }

Он всегда показывает "Построены не строки"! (если я не введу что-то, что не является числом, в этом случае выдается исключение)

Кто-нибудь знает, что происходит?

Ответы [ 3 ]

2 голосов
/ 05 января 2012

cmd.Parameters.Add устарел, вы должны использовать cmd.Parameters.AddWithValue попробуйте использовать это вместо:

cmd.Parameters.AddWithValue("@ag", int.Parse(ageTextBox.Text));
0 голосов
/ 05 января 2012

Это не решение, а скорее совет по отладке.Поскольку вы сказали, что он работает нормально, когда вы вводите число в своем коде, вы можете попробовать запустить средство трассировки SQL для MySQL (я полагаю, что есть один доступный где-то) и посмотреть, какой запрос фактически выполняется на БД в «работающем»а в нерабочем случае (а может быть и в исключительном случае)?

Это может дать вам хорошее представление о том, что происходит ...

0 голосов
/ 05 января 2012

возможно, что ODBC не сообщает о количестве строк (эквивалент SET NOCOUNT ON). Вы можете попробовать добавить select @@rowcount в качестве окончательного оператора (или эквивалент для вашей конкретной БД) и использовать ExecuteScalar() (который будет читать это значение).

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