У меня есть этот код:Необходимо объявить скалярную переменную @ при обновлении таблицы
connection.Open();
string query = "UPDATE [dbo].[EmailPassword] SET HashedPassword = @hashedPassword, Salt = @salt, ForgotHisPassword = @forgotHisPassword where Email = @email";
SqlCommand command = new SqlCommand(query, connection);
string recoveredPassword = RandomPasswordGenerator.Generate();
PasswordHash passwordHash = new PasswordHash();
byte[] newHashedPassword = passwordHash.ComputeHash(recoveredPassword);
command.Parameters.AddWithValue("@hashedPassword", newHashedPassword);
command.Parameters.AddWithValue("@salt", passwordHash.saltAsString);
command.Parameters.AddWithValue("@forgotHisPassword", 1);
command.Parameters.AddWithValue("@email", TxtSendPasswordToEmail.Text);
command.ExecuteNonQuery();
И я получаю эту ошибку:
Must declare the scalar variable "@hashedPassword".
Я искал для решения достаточно долго и я не мог найти ответа, поэтому я буду очень благодарен за вашу помощь!
Edit: я, наконец, нашел проблему:
здесь находится линия прямо после этого строки кода, которые сначала я думал, не имеет ничего общего с моей ошибкой:
if (TableFunctions.querySucceeded(command))
вот как функция был построен:
public static bool querySucceeded(string query, string strConnection)
{
SqlConnection connection = new SqlConnection(strConnection);
bool succeeded = false;
try
{
connection.Open();
SqlCommand command = new SqlCommand(query, connection);
if (command.ExecuteScalar() != null)
{
succeeded = true;
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
return succeeded;
}
, который означает, что я отправить это только запрос я хочу, чтобы выполнить и соединение, и он должен выполнить его и вернуться, если успешно, но запрос не содер n параметры, которые я добавил к предыдущей команде, таким образом, эта команда пытается выполнить предыдущую команду без параметров предыдущей команды, и это то, что является ошибкой, и говорит: Должен объявлять varayable @HashedPassword. Я нашел его после того, как я использовал отладку, и мне тоже понадобилось некоторое время, чтобы получить его, но спасибо всем за поддержку!
Что такое DataType столбца HashedPassword в вашей базе данных? – Steve
вы пытаетесь передать массив байтов. –
См. Http://stackoverflow.com/questions/15518051/save-byte-array-in-sql-server – Loring