I suspect that you have two tables with the same name. One is owned by the schema ‘dbo’ (dbo.PerfDiag
), and the other is owned by the default schema of the account used to connect to SQL Server (something like userid.PerfDiag
).
When you have an unqualified reference to a schema object (such as a table) — one not qualified by schema name — the object reference must be resolved. Name resolution occurs by searching in the following sequence for an object of the appropriate type (table) with the specified name. The name resolves to the first match:
- Under the default schema of the user.
- Under the schema ‘dbo’.
The unqualified reference is bound to the first match in the above sequence.
As a general recommended practice, one should always qualify references to schema objects, for performance reasons:
-
An unqualified reference may invalidate a cached execution plan for the stored procedure or query, since the schema to which the reference was bound may change depending on the credentials executing the stored procedure or query. This results in recompilation of the query/stored procedure, a performance hit. Recompilations cause compile locks to be taken out, blocking others from accessing the needed resource(s).
-
Name resolution slows down query execution as two probes must be made to resolve to the likely version of the object (that owned by ‘dbo’). This is the usual case. The only time a single probe will resolve the name is if the current user owns an object of the specified name and type.
[Edited to further note]
The other possibilities are (in no particular order):
- You aren’t connected to the database you think you are.
- You aren’t connected to the SQL Server instance you think you are.
Double check your connect strings and ensure that they explicitly specify the SQL Server instance name and the database name.
I am trying to enter data into my database, but it is giving me the following error:
Invalid column name
Here’s my code
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();
}
tom redfern
30.4k13 gold badges91 silver badges125 bronze badges
asked Dec 5, 2011 at 18:09
4
You probably need quotes around those string fields, but, you should be using parameterized queries!
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;
Incidentally, your original query could have been fixed like this (note the single quotes):
"VALUES ('" + txtName.Text + "','" + txtPhone.Text + "','" + txtAddress.Text + "');";
but this would have made it vulnerable to SQL Injection attacks since a user could type in
'; drop table users; --
into one of your textboxes. Or, more mundanely, poor Daniel O’Reilly would break your query every time.
answered Dec 5, 2011 at 18:11
Adam RackisAdam Rackis
82.4k55 gold badges269 silver badges393 bronze badges
7
Always try to use parametrized sql query to keep safe from malicious occurrence, so you could rearrange you code as below:
Also make sure that your table has column name matches to 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();
}
answered Dec 5, 2011 at 18:55
Elias HossainElias Hossain
4,4101 gold badge19 silver badges33 bronze badges
3
Change this line:
cmd.CommandText = "INSERT INTO Data (Name,PhoneNo,Address) VALUES (" + txtName.Text + "," + txtPhone.Text + "," + txtAddress.Text + ");";
to this:
cmd.CommandText = "INSERT INTO Data (Name,PhoneNo,Address) VALUES ('" + txtName.Text + "','" + txtPhone.Text + "','" + txtAddress.Text + "');";
Your insert command is expecting text, and you need single quotes (‘) between the actual value so SQL can understand it as text.
EDIT: For those of you who aren’t happy with this answer, I would like to point out that there is an issue with this code in regards to SQL Injection. When I answered this question I only considered the question in point which was the missing single-quote on his code and I pointed out how to fix it. A much better answer has been posted by Adam (and I voted for it), where he explains the issues with injection and shows a way to prevent. Now relax and be happy guys.
answered Dec 5, 2011 at 18:12
MilkyWayJoeMilkyWayJoe
9,0822 gold badges38 silver badges53 bronze badges
4
You problem is that your string are unquoted. Which mean that they are interpreted by your database engine as a column name.
You need to create parameters in order to pass your value to the query.
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);
answered Dec 5, 2011 at 18:15
You should never write code that concatenates SQL and parameters as string — this opens up your code to SQL injection which is a really serious security problem.
Use bind params — for a nice howto see here…
answered Dec 5, 2011 at 18:16
YahiaYahia
69.4k9 gold badges114 silver badges144 bronze badges
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=WKS09SQLEXPRESS;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 = "";
}
}
}
answered Jul 5, 2016 at 12:04
Code To insert Data in Access Db using c#
Code:-
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();
}
}
}
answered Apr 18, 2014 at 18:56
Heemanshu BhallaHeemanshu Bhalla
3,5751 gold badge27 silver badges53 bronze badges
You have to use '"+texbox1.Text+"','"+texbox2.Text+"','"+texbox3.Text+"'
Instead of "+texbox1.Text+","+texbox2.Text+","+texbox3.Text+"
Notice the extra single quotes.
Dima Tisnek
11.1k4 gold badges67 silver badges120 bronze badges
answered Feb 22, 2017 at 7:46
Your issue seems to be the Name keyword. Rather use FullName or firstName and lastName, always try and remember to use CamelCase too.
answered Apr 11, 2016 at 13:17
1
first create database name «School»
than create table «students» with following columns
1. id
2. name
3. address
now open visual studio and create connection:
namespace school { public partial class Form1 : Form { SqlConnection scon; public Form1() { InitializeComponent(); scon = new SqlConnection("Data Source = ABC-PC; trusted_connection = yes; Database = school; connection timeout = 30"); } //create command SqlCommand scom = new SqlCommand("insert into students (id,name,address) values(@id,@name,@address)", scon); //pass parameters scom.Parameters.Add("id", SqlDbType.Int); scom.Parameters["id"].Value = textBox1.Text; scom.Parameters.Add("name", SqlDbType.VarChar); scom.Parameters["name"].Value = this.textBox2.Text; scom.Parameters.Add("address", SqlDbType.VarChar); scom.Parameters["address"].Value = this.textBox6.Text; scon.Open(); scom.ExecuteNonQuery(); scon.Close(); reset(); }
also check solution here: http://solutions.musanitech.com/?p=6
answered Sep 9, 2015 at 1:08
Hani MehdiHani Mehdi
1874 silver badges9 bronze badges
con = new SqlConnection(@"Data Source=.SQLEXPRESS;AttachDbFilename=C:UsersYna Maningding-DulaDocumentsVisual Studio 2010ProjectsLuxuryHotelLuxuryHotelClientsRecords.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();
answered Sep 17, 2016 at 15:40
0
I am trying to enter data into my database, but it is giving me the following error:
Invalid column name
Here’s my code
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();
}
tom redfern
30k13 gold badges94 silver badges124 bronze badges
asked Dec 5, 2011 at 18:09
4
You probably need quotes around those string fields, but, you should be using parameterized queries!
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;
Incidentally, your original query could have been fixed like this (note the single quotes):
"VALUES ('" + txtName.Text + "','" + txtPhone.Text + "','" + txtAddress.Text + "');";
but this would have made it vulnerable to SQL Injection attacks since a user could type in
'; drop table users; --
into one of your textboxes. Or, more mundanely, poor Daniel O’Reilly would break your query every time.
answered Dec 5, 2011 at 18:11
Adam RackisAdam Rackis
81.8k55 gold badges266 silver badges392 bronze badges
7
Always try to use parametrized sql query to keep safe from malicious occurrence, so you could rearrange you code as below:
Also make sure that your table has column name matches to 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();
}
answered Dec 5, 2011 at 18:55
Elias HossainElias Hossain
4,3601 gold badge19 silver badges33 bronze badges
3
Change this line:
cmd.CommandText = "INSERT INTO Data (Name,PhoneNo,Address) VALUES (" + txtName.Text + "," + txtPhone.Text + "," + txtAddress.Text + ");";
to this:
cmd.CommandText = "INSERT INTO Data (Name,PhoneNo,Address) VALUES ('" + txtName.Text + "','" + txtPhone.Text + "','" + txtAddress.Text + "');";
Your insert command is expecting text, and you need single quotes (‘) between the actual value so SQL can understand it as text.
EDIT: For those of you who aren’t happy with this answer, I would like to point out that there is an issue with this code in regards to SQL Injection. When I answered this question I only considered the question in point which was the missing single-quote on his code and I pointed out how to fix it. A much better answer has been posted by Adam (and I voted for it), where he explains the issues with injection and shows a way to prevent. Now relax and be happy guys.
answered Dec 5, 2011 at 18:12
MilkyWayJoeMilkyWayJoe
9,0822 gold badges38 silver badges53 bronze badges
4
You problem is that your string are unquoted. Which mean that they are interpreted by your database engine as a column name.
You need to create parameters in order to pass your value to the query.
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);
answered Dec 5, 2011 at 18:15
You should never write code that concatenates SQL and parameters as string — this opens up your code to SQL injection which is a really serious security problem.
Use bind params — for a nice howto see here…
answered Dec 5, 2011 at 18:16
YahiaYahia
69k9 gold badges113 silver badges143 bronze badges
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=WKS09SQLEXPRESS;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=WKS09SQLEXPRESS;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=WKS09SQLEXPRESS;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 = "";
}
}
}
answered Jul 5, 2016 at 12:04
Code To insert Data in Access Db using c#
Code:-
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();
}
}
}
answered Apr 18, 2014 at 18:56
Heemanshu BhallaHeemanshu Bhalla
3,5051 gold badge26 silver badges52 bronze badges
You have to use '"+texbox1.Text+"','"+texbox2.Text+"','"+texbox3.Text+"'
Instead of "+texbox1.Text+","+texbox2.Text+","+texbox3.Text+"
Notice the extra single quotes.
Dima Tisnek
11k4 gold badges63 silver badges120 bronze badges
answered Feb 22, 2017 at 7:46
Your issue seems to be the Name keyword. Rather use FullName or firstName and lastName, always try and remember to use CamelCase too.
answered Apr 11, 2016 at 13:17
1
first create database name «School»
than create table «students» with following columns
1. id
2. name
3. address
now open visual studio and create connection:
namespace school { public partial class Form1 : Form { SqlConnection scon; public Form1() { InitializeComponent(); scon = new SqlConnection("Data Source = ABC-PC; trusted_connection = yes; Database = school; connection timeout = 30"); } //create command SqlCommand scom = new SqlCommand("insert into students (id,name,address) values(@id,@name,@address)", scon); //pass parameters scom.Parameters.Add("id", SqlDbType.Int); scom.Parameters["id"].Value = textBox1.Text; scom.Parameters.Add("name", SqlDbType.VarChar); scom.Parameters["name"].Value = this.textBox2.Text; scom.Parameters.Add("address", SqlDbType.VarChar); scom.Parameters["address"].Value = this.textBox6.Text; scon.Open(); scom.ExecuteNonQuery(); scon.Close(); reset(); }
also check solution here: http://solutions.musanitech.com/?p=6
answered Sep 9, 2015 at 1:08
Hani MehdiHani Mehdi
1874 silver badges9 bronze badges
con = new SqlConnection(@"Data Source=.SQLEXPRESS;AttachDbFilename=C:UsersYna Maningding-DulaDocumentsVisual Studio 2010ProjectsLuxuryHotelLuxuryHotelClientsRecords.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();
answered Sep 17, 2016 at 15:40
0
I suspect that you have two tables with the same name. One is owned by the schema ‘dbo’ (dbo.PerfDiag
), and the other is owned by the default schema of the account used to connect to SQL Server (something like userid.PerfDiag
).
When you have an unqualified reference to a schema object (such as a table) — one not qualified by schema name — the object reference must be resolved. Name resolution occurs by searching in the following sequence for an object of the appropriate type (table) with the specified name. The name resolves to the first match:
- Under the default schema of the user.
- Under the schema ‘dbo’.
The unqualified reference is bound to the first match in the above sequence.
As a general recommended practice, one should always qualify references to schema objects, for performance reasons:
-
An unqualified reference may invalidate a cached execution plan for the stored procedure or query, since the schema to which the reference was bound may change depending on the credentials executing the stored procedure or query. This results in recompilation of the query/stored procedure, a performance hit. Recompilations cause compile locks to be taken out, blocking others from accessing the needed resource(s).
-
Name resolution slows down query execution as two probes must be made to resolve to the likely version of the object (that owned by ‘dbo’). This is the usual case. The only time a single probe will resolve the name is if the current user owns an object of the specified name and type.
[Edited to further note]
The other possibilities are (in no particular order):
- You aren’t connected to the database you think you are.
- You aren’t connected to the SQL Server instance you think you are.
Double check your connect strings and ensure that they explicitly specify the SQL Server instance name and the database name.
I suspect that you have two tables with the same name. One is owned by the schema ‘dbo’ (dbo.PerfDiag
), and the other is owned by the default schema of the account used to connect to SQL Server (something like userid.PerfDiag
).
When you have an unqualified reference to a schema object (such as a table) — one not qualified by schema name — the object reference must be resolved. Name resolution occurs by searching in the following sequence for an object of the appropriate type (table) with the specified name. The name resolves to the first match:
- Under the default schema of the user.
- Under the schema ‘dbo’.
The unqualified reference is bound to the first match in the above sequence.
As a general recommended practice, one should always qualify references to schema objects, for performance reasons:
-
An unqualified reference may invalidate a cached execution plan for the stored procedure or query, since the schema to which the reference was bound may change depending on the credentials executing the stored procedure or query. This results in recompilation of the query/stored procedure, a performance hit. Recompilations cause compile locks to be taken out, blocking others from accessing the needed resource(s).
-
Name resolution slows down query execution as two probes must be made to resolve to the likely version of the object (that owned by ‘dbo’). This is the usual case. The only time a single probe will resolve the name is if the current user owns an object of the specified name and type.
[Edited to further note]
The other possibilities are (in no particular order):
- You aren’t connected to the database you think you are.
- You aren’t connected to the SQL Server instance you think you are.
Double check your connect strings and ensure that they explicitly specify the SQL Server instance name and the database name.
Я работаю над изменением существующей хранимой процедуры SQL Server. Я добавил два новых столбца в таблицу и также изменил хранимую процедуру, чтобы выбрать эти два столбца. Хотя столбцы доступны в таблице SQL Server продолжает давать эту ошибку:
недопустимое имя столбца ‘INCL_GSTAMOUNT’
может кто-нибудь пожалуйста, скажите мне, что тут не так?
1430
9
9 ответов:
всякий раз, когда это происходит со мной, я нажимаю Ctrl+ Shift+R обновления
intellisense
, закройте окно запроса (сохранить при необходимости), а затем запустите новый сеанс, который обычно работает довольно хорошо.
также может произойти, если положить строку в двойные кавычки вместо одинарных.
Intellisense не обновляется автоматически, и вы не должны полностью полагаться на это
эта ошибка также может возникать в инкапсулированных инструкциях SQL, например
объявить @tableName nvarchar (20) SET @tableName = ‘GROC’
объявить @updtStmt nvarchar (4000)
SET @updtStmt = ‘Update tbProductMaster_’ [email protected] + ‘ SET
department_str = ‘ + @tableName exec sp_executesql @updtStmtтолько чтобы обнаружить, что отсутствуют цитаты для инкапсуляции параметра «@tableName » далее, как следующее:
SET @updtStmt = ‘Update tbProductMaster_’ [email protected] + ‘ SET
department_str = «‘ + @tableName+»»спасибо
я получаю ту же ошибку при создании представления.
представьте себе запрос select, который выполняется без проблем:
select id from products
попытка создать представление из того же запроса приведет к ошибке:
create view app.foobar as select id from products
Msg 207, Уровень 16, состояние 1, процедура foobar, строка 2
Недопустимое имя столбца «id».для меня это оказалось проблемой области видимости; обратите внимание, что представление создается в другой схеме. Указание схема из
products
таблица решила проблему. То есть.. используя простоproducts
.
с обновить таблицу или закрыть и открыть sql server эта работа
У меня была похожая проблема.
проблема заключалась в том, что в таблице был триггер, который записывал изменения в таблицу журнала аудита. В таблице журнала аудита отсутствовали столбцы.
следующая процедура помогла мне решить эту проблему, но я не знаю, почему.
- вырезать код, о котором идет речь, заданный строками в сообщении
- сохраните запрос (например, в файл)
- вставьте код туда, где он был раньше
- снова сохраните запрос
даже если это, кажется, тот же запрос, выполняющий его не бросил эту ошибку
Я просто попробовал.
Если вы выполните инструкцию для создания локальной таблицы, инструмент примет, что это имя столбца существует.
Просто отметьте оператор генерации таблицы в окне редактора и нажмите кнопку Выполнить.
YFKoenigsegg 1 / 1 / 0 Регистрация: 06.10.2018 Сообщений: 160 |
||||||||
1 |
||||||||
Недопустимое имя столбца19.02.2020, 14:48. Показов 8949. Ответов 8 Метки нет (Все метки)
Добрый день. Использую Entity Framework при сохранении пользователя в БД:
Но вот в строке
выбрасывается исключение, которое гласит, что «Недопустимое имя столбца Id». Подскажите пожалуйста, как пофиксить.
__________________ 0 |
bite 3264 / 2852 / 659 Регистрация: 13.04.2015 Сообщений: 6,732 |
|
19.02.2020, 14:58 |
2 |
Подскажите пожалуйста, как пофиксить. Понятно как — ввести допустимое имя столбца. 0 |
602 / 369 / 132 Регистрация: 06.03.2017 Сообщений: 1,364 |
|
19.02.2020, 15:01 |
3 |
Было бы неплохо глянуть на саму бд. А так только гадать. Ну и не видно, где передается парамет для Id 0 |
YFKoenigsegg 1 / 1 / 0 Регистрация: 06.10.2018 Сообщений: 160 |
||||
19.02.2020, 16:00 [ТС] |
4 |
|||
А параметр Id я не передаю, тк он используется в качестве автоинкремента при добавлении новой записи в БД.
0 |
796 / 579 / 207 Регистрация: 21.02.2019 Сообщений: 2,095 |
|
19.02.2020, 16:35 |
5 |
YFKoenigsegg, 0 |
YFKoenigsegg 1 / 1 / 0 Регистрация: 06.10.2018 Сообщений: 160 |
||||||||||||||||
19.02.2020, 18:54 [ТС] |
6 |
|||||||||||||||
Да, в этом классе это поле есть(его там я поставил с той целью, чтобы потом получить Id из базы данных — а надо ли создавать прямо целое поля для этого или надо без него?), а если я убираю
Код класса UserClient:
Добавлено через 1 час 30 минут
и подключил:
и убрал вовсе полe Id 0 |
11045 / 7601 / 1176 Регистрация: 21.01.2016 Сообщений: 28,582 |
|
20.02.2020, 06:53 |
7 |
Решил проблему.Добавил следующее: Это дичь. Для ключа нужно использовать отдельное поле с INT или GUID. 3 |
YFKoenigsegg 1 / 1 / 0 Регистрация: 06.10.2018 Сообщений: 160 |
||||
20.02.2020, 19:33 [ТС] |
8 |
|||
Всё, переделал.
0 |
11045 / 7601 / 1176 Регистрация: 21.01.2016 Сообщений: 28,582 |
|
21.02.2020, 01:54 |
9 |
Поле Id должно называться так же, как и имя столбца(то есть UserId): Не обязательно. Этот момент настраивается. 0 |
Добрый день!
После перехода на MS SQL 2016 столкнулись со следующей ошибкой при работе пользователей через веб браузер и через тонкого клиента с подключением через http:
Платформа: 1С:Предприятие 8.3 (8.3.11.2867 )
Невосстановимая ошибка
Ошибка при выполнении запроса POST к ресурсу /e1cib/logForm:
по причине:Ошибка СУБД:
Microsoft SQL Server Native Client 11.0: Недопустимое имя столбца «PartNo».
HRESULT=80040E14, SQLSrvr: SQLSTATE=42S22, state=1, Severity=10, native=207, line=1
Ошибка спонтанная, возникает как на типовых конфигурациях, так и на самописных простеньких конфигурациях с отключенным режимом совместимости.
При работе в толстом клиенте ошибка не возникала ни когда.
Веб сервер Апач. Пробовались разные версии — 2.2, 2.4. Использовались как отдельные Линукс сервера, так и устанавливался апач на сервер 1с предприятия.
Сервер 1С и SQl установлены на одном сервере. Используется шаред мемори. Отключение шаред мемори не помогло.
Версия SQL:
Microsoft SQL Server 2016 (SP1-CU7-GDR) (KB4057119) — 13.0.4466.4 (X64)
Уровень совместимости базы данных менялся от 100 до 130.
Первоначально проблема возникла на версии 1С 8.3.10.2667, обновление на 8.3.11.2867 — не помогло.
Стандартные «пляски» — выгрузка загрузка через DT, удаление базы из сервера 1с и создание заново, удаление и создание базы sql, очистка всевозможных кешей — ничего не помогло.
Подскажите, какие процедуры можно провести для поиска и решения проблемы?
Всякий раз, когда я отправляю свою форму, он дает мне код ошибки:
«Недопустимое имя столбца» для всех событийспециалиста, телефона, телефона2 и т.д. и @SPECIALIST, @CUST_PHONE, @CUST_PHONE2 и т.д.
Вот мой код ниже, возможно, я не правильно пишу инструкцию SQL или параметры? Те, у которых @infront, есть то, что в моей базе данных, а другие строчные — мои текстовые поля. Я относительно новичок в этом типе кодирования.
Изменить: Изменено мое выражение INSERT INTO на то, что было предложено. Ошибка все еще сохраняется, но сводится к минимуму до
«Недопустимое имя столбца eventpecialist, Недопустимое имя столбца телефона, Недопустимое имя столбца phone2 и т.д.»
private void execution(string eventspecialist, string phone, string phone2, string firstname, string lastname, string besttime, string companyname, string nonprofit, string requesteddate, string requestedtime, string attendance, string eventtype, string other, string leadsource, string notes, string catering, string bar, string damagedeposit, string dancefloor, string griddate, string gridnotes, string comments)
{
SqlConnection conn = new SqlConnection(GetConnectionString());
string sql = "INSERT INTO tblcontacts (@SPECIALIST, @CUST_PHONE1, @CUST_PHONE2, @CUST_FNAME, @CUST_LNAME, @BEST_TIME, @COMPANY_NAME, @NONPROFIT, @REQ_DATE, @REQ_TIME, @ATTENDANCE, @EVENT_TYPE, @OTHER_DESC, @LEAD_SOURCE, @NOTES, @CATERING, @BAR, @DAMAGE_DEPOSIT, @DANCE_FLOOR) VALUES (eventspecialist, phone, phone2, firstname, lastname, besttime, companyname, nonprofit, requesteddate, requestedtime, attendance, eventtype, other, leadsource, notes, catering, bar, damagedeposit, dancefloor)";
string sql2 = "INSERT INTO tblnotes (@NOTEDATE, @NOTEBY, @COMMENTS) VALUES (griddate, gridnotes, comments)";
try
{
conn.Open();
SqlCommand cmd = new SqlCommand(sql, conn);
cmd.Parameters.Add("@SPECIALIST", SqlDbType.NVarChar, 50).Value = eventspecialist;
cmd.Parameters.Add("@CUST_PHONE1", SqlDbType.NVarChar, 50).Value = phone;
cmd.Parameters.Add("@CUST_PHONE2", SqlDbType.NVarChar, 50).Value = phone2;
cmd.Parameters.Add("@CUST_FNAME", SqlDbType.NVarChar, 50).Value = firstname;
cmd.Parameters.Add("@CUST_LNAME", SqlDbType.NVarChar, 50).Value = lastname;
cmd.Parameters.Add("@BEST_TIME", SqlDbType.NVarChar, 50).Value = besttime;
cmd.Parameters.Add("@COMPANY_NAME", SqlDbType.NVarChar, 225).Value = companyname;
cmd.Parameters.Add("@NONPROFIT", SqlDbType.NVarChar, 10).Value = nonprofit;
cmd.Parameters.Add("@REQ_DATE", SqlDbType.Date, 20).Value = requesteddate;
cmd.Parameters.Add("@REQ_TIME", SqlDbType.Time, 20).Value = requestedtime;
cmd.Parameters.Add("@ATTENDANCE", SqlDbType.Int, 50).Value = attendance;
cmd.Parameters.Add("@EVENT_TYPE", SqlDbType.NVarChar, 50).Value = eventtype;
cmd.Parameters.Add("@OTHER_DESC", SqlDbType.NVarChar, 225).Value = other;
cmd.Parameters.Add("@LEAD_SOURCE", SqlDbType.NVarChar, 50).Value = leadsource;
cmd.Parameters.Add("@NOTES", SqlDbType.NVarChar, 225).Value = notes;
cmd.Parameters.Add("@CATERING", SqlDbType.NVarChar, 1).Value = catering;
cmd.Parameters.Add("@BAR", SqlDbType.NVarChar, 1).Value = bar;
cmd.Parameters.Add("@DAMAGE_DEPOSIT", SqlDbType.NVarChar, 19).Value = damagedeposit;
cmd.Parameters.Add("@DANCE_FLOOR", SqlDbType.Money).Value = Decimal.Parse(dancefloor);
cmd.CommandType = CommandType.Text;
cmd.ExecuteNonQuery();
}
catch (System.Data.SqlClient.SqlException ex_msg)
{
string msg = "Error occured while inserting";
msg += ex_msg.Message;
throw new Exception(msg);
}
finally
{
conn.Close();
}
try
{
conn.Open();
SqlCommand cmd = new SqlCommand(sql2, conn);
cmd.Parameters.Add("@NOTEDATE", SqlDbType.Date, 50).Value = griddate;
cmd.Parameters.Add("@NOTEBY", SqlDbType.NVarChar, 50).Value = gridnotes;
cmd.Parameters.Add("@COMMENTS", SqlDbType.NVarChar, 50).Value = comments;
cmd.CommandType = CommandType.Text;
cmd.ExecuteNonQuery();
}
catch (System.Data.SqlClient.SqlException ex_msg)
{
string msg = "Error occured while inserting";
msg += ex_msg.Message;
throw new Exception(msg);
}
finally
{
conn.Close();
}
}
protected void Page_Load(object sender, EventArgs e)
{
griddate.Text = DateTime.Now.ToString("yyyy/MM/dd");
}
protected void submit_Click(object sender, EventArgs e)
{
if (requesteddate.Text == "")
{
Finish.Text = "Please complete the form!";
}
else if (requestedtime.Text == "")
{
Finish.Text = "Please complete the form!";
}
else if (attendance.Text == "")
{
Finish.Text = "Please complete the form!";
}
else
{
execution(eventspecialist.Text, phone.Text, phone2.Text, firstname.Text, lastname.Text, besttime.SelectedItem.Text, companyname.Text, nonprofit.Text, requesteddate.Text, requestedtime.Text, attendance.Text, eventtype.SelectedItem.Text, other.Text, leadsource.SelectedItem.Text, notes.Text, catering.Text, bar.Text, damagedeposit.Text, dancefloor.SelectedItem.Text, griddate.Text, gridnotes.SelectedItem.Text, comments.Text);
Finish.Visible = false;
conform.Visible = true;
}
}
Если я попытаюсь выполнить следующий код, я получу сообщение об ошибке
Сообщение 207, уровень 16, состояние 1, строка 3 Недопустимое имя столбца «Другой». Сообщение 207, уровень 16, состояние 1, строка 4 Недопустимое имя столбца «Другой».
хотя предикат для обоих IF
утверждения всегда оцениваются как ложные.
CREATE TABLE #Foo (Bar INT)
GO
IF (1=0)
BEGIN
SELECT Another FROM #Foo
END
GO
IF (1=0)
BEGIN
ALTER TABLE #Foo ADD Another INT
SELECT Another FROM #Foo
END
GO
DROP TABLE #Foo
Это, вероятно, слишком упрощено для примера; на самом деле мне нужно выбрать значения из столбца, но только если столбец существует. Если его не существует, меня это не волнует. В проблеме, которая заставила меня задать этот вопрос, мой предикат был примерно таким: EXISTS (SELECT * FROM sys.columns WHERE object_id = @ID AND name = @Name)
. Есть ли способ добиться этого, не прибегая к моему заклятому врагу Dynamic SQL? Я понимаю, что мой SQL всегда должен быть правильно сформирован (т.е. соответствовать грамматике) — даже в блоке, который никогда не выполняется, — но я ошеломлен тем, что меня также заставляют сделать его семантически правильным!
EDIT:
Хотя я не уверен, что приведенный ниже код сильно добавляет к приведенному выше коду, это еще один пример проблемы. В этом сценарии я хочу установить только значение Определенно (которое определенно существует как столбец) со значением из Может (которое, возможно, существует как столбец), если Может быть.
IF EXISTS (SELECT * FROM sys.columns WHERE object_id = OBJECT_ID('dbo.TableName', 'U') AND name = 'Maybe')
BEGIN
UPDATE dbo.TableName SET Definitely = Maybe
END
I am trying to UPDATE a specific column within a table, but I get an error due to the fact that when SQL compiles, the column name IssueTimeUTC does not actually exist. Here is my sample code:
WHILE @startissuetime<='23:30'
BEGIN
ALTER TABLE Intraday_Forecast_temp
ADD IssueTimeUTC SMALLDATETIME
UPDATE Intraday_Forecast_temp
SET IssueTimeUTC=CAST(@tempdate AS SMALLDATETIME)
WHERE DateTimeUTC>CAST(@tempdate AS SMALLDATETIME)
UPDATE Intraday_Forecast_temp
SET IssueTimeUTC=Dateadd(d,-1,CAST(@tempdate AS SMALLDATETIME))
WHERE
DateTimeUTC<=CAST(@tempdate AS SMALLDATETIME)
END
I have read multiple similar posts, but I cannot make anything work therefore I am kindly asking you if you could help me.
The error I get is this:
Msg 207, Level 16, State 1, Line 56 Invalid column name ‘IssueTimeUTC’.
Update: So basically I was not able to find an exact solution to this specific problem but I just found a way to go »around» the problem instead. So this is the updated code I used.
WHILE @startissuetime<='23:30'
BEGIN
ALTER TABLE Intraday_Forecast_temp
DROP COLUMN IssueTimeUTC
--------
BULK INSERT.....
--------
ALTER TABLE Intraday_Forecast_temp
ADD IssueTimeUTC SMALLDATETIME
UPDATE Intraday_Forecast_temp
SET IssueTimeUTC=CAST(@tempdate AS SMALLDATETIME)
WHERE DateTimeUTC>CAST(@tempdate AS SMALLDATETIME)
UPDATE Intraday_Forecast_temp
SET IssueTimeUTC=Dateadd(d,-1,CAST(@tempdate AS SMALLDATETIME))
WHERE DateTimeUTC<=CAST(@tempdate AS SMALLDATETIME)
END
I know that this is not probably the most elegant solution but I initially defined the Intraday_Forecast_temp table WITH the column IssueTimeUTC , then I drop it and add it again. This way, SQL stop complaining that the column does not exist upon compilation
OneManPunch 0 / 0 / 0 Регистрация: 20.03.2020 Сообщений: 18 |
||||
1 |
||||
Недопустимое имя столбца15.05.2021, 14:14. Показов 3206. Ответов 3 Метки нет (Все метки)
Здравствуйте. При написании запроса, возникает ошибка. Никак не могу понять в чём проблема
«Недопустимое имя столбца «Стоимость заказа».
0 |
Programming Эксперт 94731 / 64177 / 26122 Регистрация: 12.04.2006 Сообщений: 116,782 |
15.05.2021, 14:14 |
Ответы с готовыми решениями: Недопустимое имя столбца В общем, в БД есть таблица, один столбец которой — дата в формате… Недопустимое имя столбца Недопустимое имя столбца go Недопустимое имя столбца… 3 |
17250 / 7091 / 1595 Регистрация: 21.06.2012 Сообщений: 13,335 |
|
15.05.2021, 15:55 |
2 |
Вместо ‘Стоимость заказа’ написать [Стоимость заказа] не пробовали. Не по теме: По всей видимости навеяно MySQL, но и там ‘ другие `
0 |
3466 / 2101 / 670 Регистрация: 29.05.2013 Сообщений: 9,010 |
|
15.05.2021, 16:20 |
3 |
Я тут вижу 2 непонятки:
0 |
invm 3337 / 2041 / 728 Регистрация: 02.06.2013 Сообщений: 5,017 |
||||
15.05.2021, 17:39 |
4 |
|||
Никак не могу понять в чём проблема Проблема — в нежелании читать документацию.
1 |
IT_Exp Эксперт 87844 / 49110 / 22898 Регистрация: 17.06.2006 Сообщений: 92,604 |
15.05.2021, 17:39 |
Помогаю со студенческими работами здесь Ошибка недопустимое имя столбца Недопустимое имя столбца (Подчеркнутый текст) Недопустимое имя объекта Недопустимое имя объекта Недопустимое имя объекта У меня такой вопрос, я создал таблицу STUDENT и пытаюсь сделать свой первый запрос … Недопустимое имя объекта Искать еще темы с ответами Или воспользуйтесь поиском по форуму: 4 |