2016-07-15 4 views
-1

У меня есть эта таблица, которую я назвал Users, и всякий раз, когда пользователь использует форму регистрации, я хочу вставить в таблицу Users.table все учетные данные, которые он вводит , Проблема в том, что каким-то образом база данных пытается преобразовать имя пользователя (столбец) из varchar в int. Это моя вставка запрос:конвертирует varchar в int, когда я вставляю в таблицу sql

string Query = "Insert into Users(FirstName, LastName, Username, 
       Password, Role, Email, Class) values('" + txtfn.Text + "', 
       '" + txtsn.Text + "','" + txtUsername.Text + "','" + txtPassword.Text + "', 
       '" + cbRole.Text + "','" + txtEmail.Text + "','" + cbClass.Text + "')"; 

The error that pops-ups everytime a user is trying to sign up

Как я могу предотвратить это преобразование происходило или любой другой способ справиться с этой ошибкой? Спасибо заранее.

+1

Можете ли вы опубликовать оператор CREATE TABLE для таблицы Users? – Mangist

+0

Каков тип данных столбца «Имя пользователя»? Каково значение 'txtUsername.Text'? –

+3

Остерегайтесь внедрения SQL! Смерть! Используйте параметры ADO.NET. –

ответ

2

Вот как использовать параметры SQL и указать типы. Что более безопасно и точнее, а также обрабатывать преобразования для некоторых типов (например, DateTime):

string Query = "Insert into Users(FirstName, LastName, Username, " 
      + " Password, Role, Email, Class) " 
      + " values(@fn, @sm, @user, @ps, @role, @email, @class)"; 

SqlCommand sqlcom = new SqlCommand(Query, sqlconnection); 

// change the types to match SQL Column data types 
// I set all as Nvarchar as a sample 
var fnParma = new SqlParameter("@fn", SqlDbType.NVarChar); 
var smParma = new SqlParameter("@sm", SqlDbType.NVarChar); 
var userParma = new SqlParameter("@user", SqlDbType.NVarChar); 
var psParma = new SqlParameter("@ps", SqlDbType.NVarChar); 
var roleParma = new SqlParameter("@role", SqlDbType.NVarChar); 
var emailParma = new SqlParameter("@email", SqlDbType.NVarChar); 
var classParma = new SqlParameter("@class", SqlDbType.NVarChar); 

// Here set each value by converting it to the specified type. 

fnParma.Value = txtfn.Text; 
smParma.Value = txtsn.Text; 
// Continue for all the params. If you have int column use Int32.Parse(Text); 

sqlcom.ExecuteNonQuery(); 
0

Ваш столбец username в таблице sql ожидает целое число, и здесь вы передаете строку. Поэтому измените тип данных столбца username на varchar в таблице. Он будет работать нормально. Надеюсь, это понятно.

+0

Вы проверили исключение, сначала его sqlexception второй не удается, когда пытаетесь преобразовать имя пользователя в int. это означает, что он ожидает целое число и пытается его конвертировать и терпеть неудачу. –

+0

вот что я говорю, глядя на ошибку, которую столбец ожидает целого, и вот какое значение он передаёт varchar. –

+0

Если он публикует сценарий создания таблицы, нам будет легче дать конкретное утверждение о проблеме. –