2016-06-15 5 views
0

когда развивается только страницу регистрации произошла эта ошибкаSqlException при запросе базы данных

error:An exception of type 'System.Data.SqlClient.SqlException' occurred in System.Data.dll but was not handled in user code

код

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Data.SqlClient; 
using System.Configuration; 

public partial class Registration : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     if (IsPostBack) 
     { 
      SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["RegistrationConnectionString"].ConnectionString); 
      conn.Open(); 
      String checkuser = "select count(*) from [UserData] where User Name='"+ TextBox1UN.Text +"'"; 
      SqlCommand comm = new SqlCommand(checkuser,conn); 
      int temp = Convert.ToInt32(comm.ExecuteScalar().ToString()); 
      if(temp==1) 
      { 
       Response.Write("user allready exists"); 

      } 

     conn.Close(); 

     } 

    } 

    protected void Button1_Click(object sender, EventArgs e) 
    { 
     try 
      { 
      SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["RegistrationConnectionString"].ConnectionString); 
      conn.Open(); 
      String InserQuery = "insert into [UserData](UserName,Email,Password,Country)values(@Uname,@email,@pass,@country)"; 
      SqlCommand comm = new SqlCommand(InserQuery, conn); 
      comm.Parameters.AddWithValue("@Uname", TextBox1UN.Text); 
      comm.Parameters.AddWithValue("@email", TextBox2EI); 
      comm.Parameters.AddWithValue("@pass", TextBox3PW); 
      comm.Parameters.AddWithValue("@country", DropDownList1cont.SelectedItem.ToString()); 
      comm.ExecuteNonQuery(); 
      Response.Write("Registration is succesful"); 
      Response.Write("Administrator.aspx"); 

      conn.Close(); 
     } 
     catch (SqlException ex) 
     { 
      Response.Write("Error:"+ex.ToString()); 
     } 
    } 

    protected void TextBox1_TextChanged(object sender, EventArgs e) 
    { 

    } 
} 

ASPX файл:

<asp:SqlDataSource ID="SqlDataSourceRegistration" 
     runat="server" 
     ConnectionString="<%$ConnectionStrings:RegistrationConnectionString %>" 
     OnSelecting="SqlDataSourceRegistration_Selecting" 
     SelectCommand="SELECT * FROM [UserData]" > 
</asp:SqlDataSource> 
+0

1. Где вы получаете ошибку и 2. Каков полный текст сообщения об исключении **, включая внутренние исключения **? – stuartd

+1

Ваш код уязвим для SQL-инъекций! Прочтите https://technet.microsoft.com/en-us/library/ms161953(v=sql.105).aspx –

ответ

1

Ваш Query не действует там space между User Name и User - это ключевое слово в sql. Ваш запрос должен выглядеть следующим образом

"select count(*) from [UserData] where [email protected]"; 

Use Parameterized SQL

Добавить parameters в command вместо concatenating значений

comm.Parameters.AddWithValue("@username",TextBox1UN.Text); 
0

Подсказка: Ваш код очень взломать/незащищенный ... потому что вы кладете вводимый пользователь в строку sql вы должны использовать параметры.

У вас также есть поле в поле «Имя пользователя», которое, как я предполагаю, является вашей проблемой, поэтому я ставлю его «UserName».

Вы также должны поместить свой код в инструкцию try catch, чтобы вы могли прочитать ошибку.

try 
{ 
    SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings["RegistrationConnectionString"].ConnectionString); 

    using (SqlCommand command = new SqlCommand(
     "SELECT COUNT(*) from [UserData] where UserName= @Name", connection)) 
    { 
     // Add new SqlParameter to the command. 
     command.Parameters.Add("@Name", SqlDbType.NVarChar).Value = TextBox1UN.Text; 

     int temp = Convert.ToInt32(command.ExecuteScalar().ToString()); 

     if(temp==1) 
     { 
      Response.Write("user allready exists"); 
     } 
    } 
} 
catch (Exception ex) 
{ 
    // Display the exception's data dictionary. 
    foreach (DictionaryEntry pair in ex.Data) 
    { 
     Console.WriteLine("{0} = {1}", pair.Key, pair.Value); 
    } 
} 
+0

SqlParameter должен быть '@ Name' –

+0

Спасибо, исправлено. –