ti-enxame.com

Erro sql de nome de coluna inválido

Eu estou tentando inserir dados no meu banco de dados, mas está me dando o seguinte erro:

Nome da coluna inválido

Aqui está meu 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();
}
12
Snake

Sempre tente usar a consulta sql parametrizada para evitar a ocorrência mal-intencionada, para que você possa reorganizá-lo conforme abaixo:

Também certifique-se de que sua tabela tenha correspondências de nome de coluna para 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();
}
27
Elias Hossain

Você provavelmente precisa de citações em torno desses campos de string, mas, você deve estar usando 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;

Aliás, sua consulta original poderia ter sido corrigida assim (observe as aspas simples):

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

mas isso tornaria vulnerável a ataques de SQL Injection, já que um usuário poderia digitar 

'; drop table users; -- 

em uma de suas caixas de texto. Ou, mais mundanamente, o pobre Daniel O'Reilly quebraria sua consulta todas as vezes.

30
Adam Rackis

Altere esta linha:

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

para isso:

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

Seu comando insert está esperando texto e você precisa de aspas simples (') entre o valor real para que o SQL possa entendê-lo como texto.

EDIT: Para aqueles de vocês que não estão satisfeitos com esta resposta, gostaria de salientar que há um problema com este código em relação ao SQL Injection. Quando eu respondi a esta pergunta eu considerei apenas a questão em questão, que foi a falta de aspas no seu código e eu apontei como corrigi-lo. Uma resposta muito melhor foi postada por Adam (e eu votei por ela), onde ele explica os problemas com injeção e mostra uma maneira de prevenir. Agora relaxe e seja feliz pessoal.

6
MilkyWayJoe

Seu problema é que sua string não é citada. O que significa que eles são interpretados pelo seu mecanismo de banco de dados como um nome de coluna.

Você precisa criar parâmetros para passar seu valor para a 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);
5
Pierre-Alain Vigeant

Você nunca deve escrever código que concatene SQL e parâmetros como string - isso abre seu código para SQL injection que é um problema de segurança realmente sério.

Use bind params - para um bom como ver aqui ...

4
Yahia

Código Para inserir dados no 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();
    }
}

}

2
Heemanshu Bhalla
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
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    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 = "";
        }
    }
}
2
pavithra madhuwanthi

Você tem que usar '"+texbox1.Text+"','"+texbox2.Text+"','"+texbox3.Text+"'

Em vez de "+texbox1.Text+","+texbox2.Text+","+texbox3.Text+"

Observe as aspas simples extras.

1
user7603356

primeiro crie o nome do banco de dados "Escola" do que crie a tabela "alunos" com as seguintes colunas 1. id 2. nome 3. endereço

agora abra o visual studio e crie conexão:

namespace school 
 {
 classe parcial pública Form1: Formulário 
 {
 SqlConnection scon; 
 
 
 public Form1 () 
 {
 
 InicializarComponente (); 
 
 Scon = new SqlConnection ("Fonte de Dados = ABC-PC; trusted_connection = yes; Banco de Dados = school; tempo limite de conexão = 30 "); 
} 
 
 // criar comando 
 
 SqlCommand scom = new SqlCommand (" inserir nos alunos (id, nome, endereço) valores (@ id, @ nome, @ endereço) ", scon); 
 
 // passa parâmetros 
 
 scom.Parameters .Add ("id", SqlDbType.Int); 
 Scom.Parameters ["id"]. Valor = textBox1.Text; 
 
 Scom.Parameters.Add ("nome ", SqlDbType.VarChar); 
 Scom.Parameters [" name "]. Valor = this.textBox2.Text; 
 
 Scom.Parameters.Add (" endereço ", SqlDbType .VarChar); 
 Scom.Parameters ["endereço"]. Valor = this.textBox6.Text; 
 
 
 scon.Open (); 
 scom.ExecuteNonQuery (); 
 scon.Close (); 
 reset (); 
 
}

verifique também a solução aqui: http://solutions.musanitech.com/?p=6

0
Hani Mehdi
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();
0
Yna

Seu problema parece ser a palavra-chave Name. Em vez disso, use FullName ou firstName e lastName, sempre tente e lembre-se de usar o CamelCase também.

0
Jonathan Yaniv Ben Avraham