2014-09-12 2 views
0

Я испытываю эту ошибку под названием Object, должен реализовать IConvertible. , пожалуйста, помогите мне! Я думаю, что это из-за выпадающего списка для типа пользователя. даже если я удаляю/комментирую раскрывающийся список, я все еще испытываю эту ошибку.Объект должен реализовывать IConvertible с использованием ASP.NET

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 

using System.Data; 
using System.Data.SqlClient; 

public partial class Admin_Register : System.Web.UI.Page 
{ 
    SqlConnection con = new SqlConnection(Helper.GetCon()); 

    protected void Page_Load(object sender, EventArgs e) 
    { 
      GetUserTypes(); 

    } 

    void GetUserTypes() 
    { 
     con.Open(); 
     SqlCommand cmd = new SqlCommand(); 
     cmd.Connection = con; 
     cmd.CommandText = "SELECT TypeID, TypeName FROM UserTypes"; 
     SqlDataReader data = cmd.ExecuteReader(); 
     ddlUserTypes.DataSource = data; 
     ddlUserTypes.DataTextField = "TypeName"; 
     ddlUserTypes.DataValueField = "TypeID"; 
     ddlUserTypes.DataBind(); 
     con.Close(); 
    } 

    bool IsRecordExisting(string email) 
    { 
     bool existing = true; 
     con.Open(); 
     SqlCommand cmd = new SqlCommand(); 
     cmd.Connection = con; 
     cmd.CommandText = "SELECT EmailAddress FROM Users WHERE [email protected]"; 
     cmd.Parameters.Add("@EmailAddress", SqlDbType.VarChar).Value = email; 
     SqlDataReader data = cmd.ExecuteReader(); 
     if (data.HasRows) 
      existing = true; 
     else 
      existing = false; 
     con.Close(); 
     return existing; 
    } 


    protected void btnRegister_Click(object sender, EventArgs e) 
    { 
     if (!IsRecordExisting(txtEmail.Text)) 
     { 
      con.Open(); 
      SqlCommand cmd = new SqlCommand(); 
      cmd.Connection = con; 
      cmd.CommandText = "INSERT INTO Users VALUES (@EmailAddress, @Password, @TypeID, @FirstName, @LastName, @MiddleInitial, @Address, @TelNo, @CelNo, @Status"; 
      cmd.Parameters.Add("@EmailAddress", SqlDbType.VarChar).Value = txtEmail.Text; 
      cmd.Parameters.Add("@Password", SqlDbType.VarChar).Value = Helper.CreateSHAHash(txtPassword.Text); 

      cmd.Parameters.Add("@TypeID", SqlDbType.Int).Value = ddlUserTypes.SelectedValue; 
      cmd.Parameters.Add("@FirstName", SqlDbType.VarChar).Value = txtFN; 
      cmd.Parameters.Add("@LastName", SqlDbType.VarChar).Value = txtLN; 
      cmd.Parameters.Add("@MiddleInitial", SqlDbType.VarChar).Value = ""; 
      cmd.Parameters.Add("@Address", SqlDbType.VarChar).Value = ""; 
      cmd.Parameters.Add("@TelNo", SqlDbType.VarChar).Value = ""; 
      cmd.Parameters.Add("@CelNo", SqlDbType.VarChar).Value = ""; 
      cmd.Parameters.Add("@Status", SqlDbType.VarChar).Value = "Active"; 
      cmd.ExecuteNonQuery(); 
      con.Close(); 
      Helper.Log("0", "Register", "User Registration"); 
      Helper.ClearTextboxes(this.Controls); 
      register.Visible = true; 
     } 
     else 
     { 
      register.Visible = false; 
      error.Visible = true; 
     } 
    } 
} 
+1

В какой строке вы получаете эту ошибку. –

+0

Я получаю эту ошибку с cmd.ExecuteNonQuery(); –

ответ

0

Я нашел две проблемы в коде

Первые

Пожалуйста, проверьте эти строки

cmd.Parameters.Add("@FirstName", SqlDbType.VarChar).Value = txtFN; 
cmd.Parameters.Add("@LastName", SqlDbType.VarChar).Value = txtLN; 

Вы устанавливаете значение параметра как Texbox. Вам необходимо установить текст текстового поля в качестве значений параметров.

cmd.Parameters.Add("@FirstName", SqlDbType.VarChar).Value = txtFN.Text; 
cmd.Parameters.Add("@LastName", SqlDbType.VarChar).Value = txtLN.Text; 

Второй

Выпадающий список SelectedValue свойство возврата строки значение. В этом случае вам нужно преобразовать значение строки в тип int при назначении времени.

Пожалуйста, измените эту строку

cmd.Parameters.Add("@TypeID", SqlDbType.Int).Value = ddlUserTypes.SelectedValue; 

в

cmd.Parameters.Add("@TypeID", SqlDbType.Int).Value = Convert.ToInt32(ddlUserTypes.SelectedValue); 
+0

Большое спасибо! –

Смежные вопросы