Nombre de columna inválido error sql

Intento ingresar datos en mi base de datos, pero me da el siguiente error:

Nombre de columna inválido

Aquí está mi código

string connectionString = "Persist Security Info=False;User ID=sa;Password=123;Initial Catalog=AddressBook;Server=Bilal-PC"; using (SqlConnection connection = new SqlConnection(connectionString)) { SqlCommand cmd = new SqlCommand(); cmd.CommandText = "INSERT INTO Data (Name,PhoneNo,Address) VALUES (" + txtName.Text + "," + txtPhone.Text + "," + txtAddress.Text + ");"; cmd.CommandType = CommandType.Text; cmd.Connection = connection; connection.Open(); cmd.ExecuteNonQuery(); } 

Siempre trate de usar consultas sql parametrizadas para mantenerse a salvo de ocurrencias maliciosas, para que pueda reorganizar su código de la siguiente manera:

También asegúrese de que su tabla tenga un nombre de columna que coincida con Name , PhoneNo , Address .

 using (SqlConnection connection = new SqlConnection(connectionString)) { SqlCommand cmd = new SqlCommand("INSERT INTO Data (Name, PhoneNo, Address) VALUES (@Name, @PhoneNo, @Address)"); cmd.CommandType = CommandType.Text; cmd.Connection = connection; cmd.Parameters.AddWithValue("@Name", txtName.Text); cmd.Parameters.AddWithValue("@PhoneNo", txtPhone.Text); cmd.Parameters.AddWithValue("@Address", txtAddress.Text); connection.Open(); cmd.ExecuteNonQuery(); } 

Probablemente necesite cotizaciones alrededor de esos campos de cadena, pero, ¡debería usar consultas parametrizadas!

 cmd.CommandText = "INSERT INTO Data ([Name],PhoneNo,Address) VALUES (@name, @phone, @address)"; cmd.CommandType = CommandType.Text; cmd.Parameters.AddWithValue("@name", txtName.Text); cmd.Parameters.AddWithValue("@phone", txtPhone.Text); cmd.Parameters.AddWithValue("@address", txtAddress.Text); cmd.Connection = connection; 

Por cierto, su consulta original podría haberse corregido así (tenga en cuenta las comillas simples):

 "VALUES ('" + txtName.Text + "','" + txtPhone.Text + "','" + txtAddress.Text + "');"; 

pero esto lo habría hecho vulnerable a los ataques de inyección SQL ya que un usuario podría escribir

 '; drop table users; -- 

en uno de tus cuadros de texto. O, más mundano, el pobre Daniel O’Reilly rompería su consulta cada vez.

Cambiar esta línea:

 cmd.CommandText = "INSERT INTO Data (Name,PhoneNo,Address) VALUES (" + txtName.Text + "," + txtPhone.Text + "," + txtAddress.Text + ");"; 

a esto:

 cmd.CommandText = "INSERT INTO Data (Name,PhoneNo,Address) VALUES ('" + txtName.Text + "','" + txtPhone.Text + "','" + txtAddress.Text + "');"; 

Su comando de inserción espera texto, y necesita comillas simples (‘) entre el valor real para que SQL pueda entenderlo como texto.

EDITAR : para aquellos de ustedes que no están contentos con esta respuesta, me gustaría señalar que hay un problema con este código en lo que respecta a la inyección SQL. Cuando respondí esta pregunta, solo consideré la pregunta en el punto que era la cita que faltaba en su código y le indiqué cómo solucionarlo. Una respuesta mucho mejor ha sido publicada por Adam (y yo la voté), donde explica los problemas con la inyección y muestra una forma de prevenirla. Ahora relájate y sé feliz chicos.

Tu problema es que tu cadena no está citada. Lo que significa que su motor de base de datos los interpreta como un nombre de columna.

Necesita crear parámetros para pasar su valor a la consulta.

  cmd.CommandText = "INSERT INTO Data (Name, PhoneNo, Address) VALUES (@Name, @PhoneNo, @Address);"; cmd.Parameters.AddWithValue("@Name", txtName.Text); cmd.Parameters.AddWithValue("@PhoneNo", txtPhone.Text); cmd.Parameters.AddWithValue("@Address", txtAddress.Text); 

Nunca debe escribir código que concatene SQL y parámetros como una cadena; esto abre su código a la inyección de SQL, que es un problema de seguridad realmente serio.

Use bind params – para un buen modo de ver aquí …

Código Para insertar datos en Access Db usando c #

Código:-

 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Data.SqlClient; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace access_db_csharp { public partial class Form1 : Form { public Form1() { InitializeComponent(); } public SqlConnection con = new SqlConnection(@"Place Your connection string"); private void Savebutton_Click(object sender, EventArgs e) { SqlCommand cmd = new SqlCommand("insert into Data (Name,PhoneNo,Address) values(@parameter1,@parameter2,@parameter3)",con); cmd.Parameters.AddWithValue("@parameter1", (textBox1.Text)); cmd.Parameters.AddWithValue("@parameter2", textBox2.Text); cmd.Parameters.AddWithValue("@parameter3", (textBox4.Text)); cmd.ExecuteNonQuery(); } private void Form1_Load(object sender, EventArgs e) { con.ConnectionString = connectionstring; con.Open(); } } 

}

 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; using System.Data.SqlClient; using System.Data; namespace WpfApplication1 { ///  /// Interaction logic for MainWindow.xaml ///  public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); } private void btnAdd_Click(object sender, RoutedEventArgs e) { SqlConnection conn = new SqlConnection(@"Data Source=WKS09\SQLEXPRESS;Initial Catalog = StudentManagementSystem;Integrated Security=True"); SqlCommand insert = new SqlCommand("insert into dbo.StudentRegistration(ID, Name,Age,DateOfBirth,Email,Comment) values(@ID, @Name,@Age,@DateOfBirth,@mail,@comment)", conn); insert.Parameters.AddWithValue("@ID", textBox1.Text); insert.Parameters.AddWithValue("@Name", textBox2.Text); insert.Parameters.AddWithValue("@Age", textBox3.Text); insert.Parameters.AddWithValue("@DateOfBirth", textBox4.Text); insert.Parameters.AddWithValue("@mail", textBox5.Text); insert.Parameters.AddWithValue("@comment", textBox6.Text); if (textBox1.Text == string.Empty) { MessageBox.Show("ID Cannot be Null"); return; } else if (textBox2.Text == string.Empty) { MessageBox.Show("Name Cannot be Null"); return; } try { conn.Open(); insert.ExecuteNonQuery(); MessageBox.Show("Register done !"); } catch (Exception ex) { MessageBox.Show("Error" + ex.Message); conn.Close(); } } private void btnRetrive_Click(object sender, RoutedEventArgs e) { bool temp = false; SqlConnection con = new SqlConnection("server=WKS09\\SQLEXPRESS;database=StudentManagementSystem;Trusted_Connection=True"); con.Open(); SqlCommand cmd = new SqlCommand("select * from dbo.StudentRegistration where ID = '" + textBox1.Text.Trim() + "'", con); SqlDataReader dr = cmd.ExecuteReader(); while (dr.Read()) { textBox2.Text = dr.GetString(1); textBox3.Text = dr.GetInt32(2).ToString(); textBox4.Text = dr.GetDateTime(3).ToString(); textBox5.Text = dr.GetString(4); textBox6.Text = dr.GetString(5); temp = true; } if (temp == false) MessageBox.Show("not found"); con.Close(); } private void btnClear_Click(object sender, RoutedEventArgs e) { SqlConnection connection = new SqlConnection("Data Source=WKS09\\SQLEXPRESS;Initial Catalog = StudentManagementSystem;Integrated Security=True"); string sqlStatement = "DELETE FROM dbo.StudentRegistration WHERE ID = @ID"; try { connection.Open(); SqlCommand cmd = new SqlCommand(sqlStatement, connection); cmd.Parameters.AddWithValue("@ID", textBox1.Text); cmd.CommandType = CommandType.Text; cmd.ExecuteNonQuery(); MessageBox.Show("Done"); } finally { Clear(); connection.Close(); } } public void Clear() { textBox1.Text = ""; textBox2.Text = ""; textBox3.Text = ""; textBox4.Text = ""; } } } 

Tienes que usar '"+texbox1.Text+"','"+texbox2.Text+"','"+texbox3.Text+"'

En lugar de "+texbox1.Text+","+texbox2.Text+","+texbox3.Text+"

Observe las comillas simples adicionales.

primero cree el nombre de la base de datos “Escuela” que cree la tabla “estudiantes” con las siguientes columnas 1. id 2. nombre 3. dirección

ahora abre el estudio visual y crea una conexión:

  escuela espacio de nombres
 {
     clase parcial pública Form1: Formulario
     {
         SqlConnection scon;


         public Form1 ()
         {

             InitializeComponent ();

             scon = new SqlConnection ("Data Source = ABC-PC; trusted_connection = yes; Database = school; connection timeout = 30");
         }

 // crear comando

 SqlCommand scom = new SqlCommand ("insertar en los estudiantes (id, nombre, dirección) valores (@ id, @ nombre, @ dirección)", scon);

 // pasar los parámetros

 scom.Parameters.Add ("id", SqlDbType.Int);
 scom.Parameters ["id"]. Value = textBox1.Text;

            scom.Parameters.Add ("nombre", SqlDbType.VarChar);
             scom.Parameters ["name"]. Value = this.textBox2.Text;

             scom.Parameters.Add ("dirección", SqlDbType.VarChar);
             scom.Parameters ["address"]. Value = this.textBox6.Text;


             scon.Open ();
             scom.ExecuteNonQuery ();
             scon.Close ();
             Reiniciar();

         } 

también verifique la solución aquí: http://solutions.musanitech.com/?p=6

Su problema parece ser la palabra clave Name. En lugar de utilizar FullName o firstName y lastName, siempre intente y recuerde usar CamelCase también.

 con = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Users\Yna Maningding-Dula\Documents\Visual Studio 2010\Projects\LuxuryHotel\LuxuryHotel\ClientsRecords.mdf;Integrated Security=True;User Instance=True"); con.Open(); cmd = new SqlCommand("INSERT INTO ClientData ([Last Name], [First Name], [Middle Name], Address, [Email Address], [Contact Number], Nationality, [Arrival Date], [Check-out Date], [Room Type], [Daily Rate], [No of Guests], [No of Rooms]) VALUES (@[Last Name], @[First Name], @[Middle Name], @Address, @[Email Address], @[Contact Number], @Nationality, @[Arrival Date], @[Check-out Date], @[Room Type], @[Daily Rate], @[No of Guests], @[No of Rooms]", con); cmd.Parameters.Add("@[Last Name]", txtLName.Text); cmd.Parameters.Add("@[First Name]", txtFName.Text); cmd.Parameters.Add("@[Middle Name]", txtMName.Text); cmd.Parameters.Add("@Address", txtAdd.Text); cmd.Parameters.Add("@[Email Address]", txtEmail.Text); cmd.Parameters.Add("@[Contact Number]", txtNumber.Text); cmd.Parameters.Add("@Nationality", txtNational.Text); cmd.Parameters.Add("@[Arrival Date]", txtArrive.Text); cmd.Parameters.Add("@[Check-out Date]", txtOut.Text); cmd.Parameters.Add("@[Room Type]", txtType.Text); cmd.Parameters.Add("@[Daily Rate]", txtRate.Text); cmd.Parameters.Add("@[No of Guests]", txtGuest.Text); cmd.Parameters.Add("@[No of Rooms]", txtRoom.Text); cmd.ExecuteNonQuery();