2013-08-15 2 views
0

Я вставил значения в SQL несколько раз, но теперь я столкнулся проблемы со следующим кодомВставка значения в SQLServer

protected void Button1_Click(object sender, EventArgs e) 
    { 

     string connstring = ConfigurationManager.ConnectionStrings["ConStr"].ConnectionString; 
     con = new SqlConnection(connstring); 

     string name = txtName.Text; 
     string user = txtUser.Text; 
     string password = txtPwd.Text; 
     string email = txtEmail.Text; 
     long phone=Convert.ToInt64(txtPhone.Text); 
     string address = txtAddr.Text; 
     string city = txtCity.Text; 
     string gender = RadioButtonList1.SelectedItem.ToString(); 
     string dob = txtDOB.Text; 
     string qualification = DropDownList1.SelectedItem.ToString(); 
     string skills = CheckBoxList1.SelectedItem.ToString(); 

     string insertstring = " insert into JobRegisteration values ("+name+","+user+","+password+","+email+","+phone+","+address+","+city+","+gender+","+dob+","+qualification+","+skills+")"; 
     cmd = new SqlCommand(insertstring,con); 
     con.Open(); 
     cmd.ExecuteNonQuery(); 
     con.Close(); 

    } 
} 

Когда я вставив значения в это через asp.net страницу, ее подача следующее сообщение об ошибке.

Exception Details: System.Data.SqlClient.SqlException: Invalid column name 'sbip'. 
Invalid column name 'tttt'. 
Invalid column name 'ttt'. 
The multi-part identifier "[email protected]" could not be bound. 
Invalid column name 't'. 
Invalid column name 'tttt'. 
Invalid column name 'Male'. 
Invalid column name 'MCA'. 
Invalid column name 'C#'. 

где tttt, male mca и т. Д. И т. Д. Являются значениями, передаваемыми с страницы asp.

спасибо!

+0

Попробуйте поместить поля в SQL явно т.е. «вставить в JobRegisteration (field1_for_name, ..., field_for_skills) значения (...) " –

+0

Попробуйте использовать sql-параметры. Они более безопасны и предотвращают некоторые проблемы, такие как плохой формат ввода, ваша ошибка может быть связана с этим, если значения имеют запятые или кавычки или специальные символы, подобные этому. Примеры можно найти здесь: http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.parameters.aspx – Kuzgun

ответ

2

Вам нужно обернуть вставленные значения с ' иначе база данных рассматривать их в качестве имен столбцов:

string insertstring = " insert into JobRegisteration values ('"+name+"','"+user+"','"+password+"','"+email+"','"+phone+"','"+address+"','"+city+"','"+gender+"','"+dob+"','"+qualification+"','"+skills+"')"; 

Кроме того, как другой предложил вам действительно следует полагаться на Prepared Statements, чтобы избежать таких проблем (в том числе).

+0

подготовленные заявления здесь не очень много; это просто * параметризация *, что является существенным битом; это не совсем то же самое –

1

Существует много решений вашей проблемы.

1) Постарайтесь, чтобы соответствовать с этим форматом:

INSERT INTO table_name (column1,column2,column3,...) 
VALUES (value1,value2,value3,...); 

2), как сказал haim770, окружают ваши ценности с "

3) использовать SQL параметры способ

4) или посмотреть на Linq, это действительно упрощает работу с базой данных

1

Вам нужно добавить одну цитату ' в ваш запрос: (! каламбур)

string insertstring = " insert into JobRegisteration values ('"+name+"','"+user+"','"+password+"','"+email+"','"+phone+"','"+address+"','"+city+"','"+gender+"','"+dob+"','"+qualification+"','"+skills+"')"; 
3

используйте параметры, как показано ниже, а также using заявления

string connstring = ConfigurationManager.ConnectionStrings["ConStr"].ConnectionString; 
// change this select statement based on your exact column names 
string insertstring = "insert into JobRegisteration ([Name] ,[User] ,[Password] ,[Email] ,[Phone],[Address] ,[City] ,[Gender] ,[Dob] ,[Qualification] ,[Skills]) values (@name ,@user ,@password ,@email ,@phone,@address ,@city ,@gender ,@dob ,@qualification ,@skills)"; 

using (var con = new SqlConnection(connstring)) 
using(var cmd = new SqlCommand(insertstring, con)) 
{ 
    cmd.Parameters.AddWithValue("@name", txtName.Text); 
    cmd.Parameters.AddWithValue("@user", txtUser.Text); 
    // give all the parameters.. 
    con.Open(); 
    cmd.ExecuteNonQuery(); 
} 
0

использование с помощью, переменные связывания (а.к.а. параметры), форматировать запрос, если запрос кажется сомнительным положить то, что вы хотите явно ...

protected void Button1_Click(object sender, EventArgs e) { 
    string name = txtName.Text; 
    string user = txtUser.Text; 
    string password = txtPwd.Text; 
    string email = txtEmail.Text; 
    long phone = Convert.ToInt64(txtPhone.Text); // <- what about +77(555)123-456-78? 
    string address = txtAddr.Text; 
    string city = txtCity.Text; 
    string gender = RadioButtonList1.SelectedItem.ToString(); 
    string dob = txtDOB.Text; 
    string qualification = DropDownList1.SelectedItem.ToString(); 
    string skills = CheckBoxList1.SelectedItem.ToString(); 

    using (var con = new SqlConnection(ConfigurationManager.ConnectionStrings["ConStr"].ConnectionString)) { 
    con.Open(); 

    using(var cmd = con.CreateCommand()) { 
     cmd.CommandText = 
     // replace all "field_for_*" for actual fields 
     @"insert into JobRegisteration(
      field_for_name, 
      field_for_user, 
      field_for_password, 
      field_for_email, 
      field_for_phone, 
      field_for_address, 
      field_for_city, 
      field_for_gender, 
      field_for_dob, 
      field_for_qualification, 
      field_for_skills) 
      values (
      @prm_name, 
      @prm_user, 
      @prm_password, 
      @prm_email, 
      @prm_phone, 
      @prm_address, 
      @prm_city, 
      @prm_gender, 
      @prm_dob, 
      @prm_qualification, 
      @prm_skills)"; 

     cmd.Parameters.AddWithValue("@prm_name", name); 
     cmd.Parameters.AddWithValue("@prm_user", user); 
     cmd.Parameters.AddWithValue("@prm_password", password); 
     cmd.Parameters.AddWithValue("@prm_email", email); 
     cmd.Parameters.AddWithValue("@prm_phone", phone); 
     cmd.Parameters.AddWithValue("@prm_address", address); 
     cmd.Parameters.AddWithValue("@prm_city", city); 
     cmd.Parameters.AddWithValue("@prm_gender", gender); 
     cmd.Parameters.AddWithValue("@prm_dob", dob); 
     cmd.Parameters.AddWithValue("@prm_qualification", qualification); 
     cmd.Parameters.AddWithValue("@prm_skills", skills); 

     cmd.ExecuteNonQuery(); 
    } 
    } 
} 
Смежные вопросы