Возможно, я просто не искал правильные параметры, но я просто не могу понять, что это такое.
Я создал хешированный пароль, который, по моему мнению, должен быть байтовым массивом. Затем мне нужно вставить это в SqlDataSource и там, где моя проблема.Проблемы с вставкой байта [] в SqlDataSource ASP.Net
У меня вопрос:
**Column** || **Data Type** ---------------------------- Name || varchar(50) Username || varchar(50) HashedPwd || varbinary(50) Salt || varbinary(50) UserType || varchar(50)
Мой код выглядит следующим образом;
HashAlgorithm hashing = new SHA256Managed();
byte[] passwordPlainText = (new System.Text.ASCIIEncoding()).GetBytes(txtPassword.ToString());
byte[] salt = (new System.Text.ASCIIEncoding()).GetBytes(RNGCryptoServiceProvider.Create().ToString());
// Combine salt and password before hashing.
byte[] saltAndPwd = new byte[passwordPlainText.Length + salt.Length];
Array.Copy(passwordPlainText, saltAndPwd, passwordPlainText.Length);
Array.Copy(salt, 0, saltAndPwd, passwordPlainText.Length, salt.Length);
byte[] hashedPwd = hashing.ComputeHash(saltAndPwd);
database.InsertCommandType = SqlDataSourceCommandType.Text;
database.InsertCommand = "INSERT INTO userlist (Name, Username, HashedPwd, Salt, Type) VALUES (@insName, @insUsername, @insHashedPass, @insSalt, @insType);";
database.InsertParameters.Add("insName", txtName.Text);
database.InsertParameters.Add("insUsername", txtUsername.Text);
database.InsertParameters.Add("insHashedPass", (new System.Text.ASCIIEncoding()).GetString(hashedPwd));
database.InsertParameters.Add("insSalt", (new System.Text.ASCIIEncoding()).GetString(salt));
database.InsertParameters.Add("insType", txtType.Text);
database.Insert();
база данных вещи, что я почерпнутые из исследования в Интернете и видеть, какие варианты я дал с удобной функцией автозаполнения в Visual Studio.
FYI Я использую Visual Studio 2010 версии 10.0.4, .Net Версия 4.0.3
Кажется, есть некоторые внешние библиотеки для SQL-соединений, но я бы предпочел просто использовать встроенный материал, который предоставляет .Net.
В настоящий момент я получаю эту ошибку при запуске алгоритма вставки;
Неявное преобразование из типа данных nvarchar в varbinary не допускается. Используйте функцию CONVERT для запуска этого запроса.
Я не уверен, как использовать функцию преобразования.
Метод Add() может принимать строку, такую как строка, как я сейчас делаю, или она может также принимать строку, DbType, string. Я пробовал database.InsertParameters.Add("insSalt", DbType.Binary, salt);
, но я даже не могу скомпилировать/создать сайт. Я получил; «Невозможно преобразовать из байта [] в строку».
Если я изменю его на salt.ToString()
Я получаю; «Не удалось преобразовать значение параметра из строки в Btye []» в строке Insert().
Так что да ... действительно потеряно, любая помощь будет принята с благодарностью.
ОК, этот код работает. Спасибо за это. Не могли бы вы пояснить, почему я не использую SqlDataSource? Использую ли я SqlDataSource для доступа к GridView, который отображает пользователей и типы из базы данных? Это то, как он читает, когда я просматриваю эту страницу; http://www.asp.net/web-forms/tutorials/moving-to-aspnet-20/data-bound-controls – FizzBuzz
Добро пожаловать. Цитирование MSDN, SqlDataSource _ "Представляет базу данных SQL для элементов управления, привязанных к данным.«Итак, да, вы можете использовать его для передачи данных туда и обратно между ним и GridView, поскольку GridView _is_ связан с привязкой к данным. Здесь, с другой стороны, вы просто сохраняете некоторые данные (не из какого-либо элемента управления) к таблице db. – m1kael
Ahh отлично, спасибо за разъяснение. – FizzBuzz