Solved

SQL Server 2005 programming with Visual Studio 2005 C#: how to declare table variable used by C#?

Posted on 2009-04-11
4
381 Views
Last Modified: 2013-11-26
Hi Experts:

    I used the following code as an attempt to parametermize a table name of a SQL Server 2005 database.
    However, I got the error message in attached picture. I was asked for a "table variable", but I don't know how to declare it. Can you help me to make the code work without using Ac-Hoc method such as string concatenation and hard-coding?
    Thank you very much!

Sui
System.Data.SqlClient.SqlConnection Connection = new System.Data.SqlClient.SqlConnection(ConnectionString);

Connection.Open();

System.Data.SqlClient.SqlCommand Command = Connection.CreateCommand();

Command.CommandType = CommandType.Text;

Command.CommandText = "UPDATE @TableName SET Name = @Name, WHERE Id = @Id";

Command.Parameters.Add("Id", SqlDbType.Int);

Command.Parameters.Add("Name", SqlDbType.VarChar);

Command.Parameters.Add("TableName", SqlDbType.VarChar);

Command.Parameters["TableName"].Value = "Building";

Command.Parameters["Id"].Value = 1;

Command.Parameters["Name"].Value = "Inventory1";

 Command.ExecuteNonQuery();

Open in new window

TableVarErr.jpg
0
Comment
Question by:huangs3
  • 2
  • 2
4 Comments
 
LVL 62

Expert Comment

by:Fernando Soto
ID: 24122728
SQL parameters need @ as the first character of the name. See code snippet.
System.Data.SqlClient.SqlConnection Connection = new  System.Data.SqlClient.SqlConnection(ConnectionString);

Connection.Open();

System.Data.SqlClient.SqlCommand Command = Connection.CreateCommand();

Command.CommandType = CommandType.Text;

Command.CommandText = "UPDATE @TableName SET Name = @Name, WHERE Id = @Id";

Command.Parameters.Add("@Id", SqlDbType.Int);

Command.Parameters.Add("@Name", SqlDbType.VarChar);

Command.Parameters.Add("@TableName", SqlDbType.VarChar);

Command.Parameters["@TableName"].Value = "Building";

Command.Parameters["@Id"].Value = 1;

Command.Parameters["@Name"].Value = "Inventory1";

Command.ExecuteNonQuery();

Open in new window

0
 

Author Comment

by:huangs3
ID: 24122923
Hi FernadoSoto:

    No, it should not need @ character in Parameters.Add and Parameters["TableName"] expression. If I hard-code the table name but leave other parameters, the code would work. I tried you last idea and got "Must declare the table variable "@TableName"" error message.
    Any further idea?
    Thank you!
0
 
LVL 62

Accepted Solution

by:
Fernando Soto earned 500 total points
ID: 24123205
Hi huangs3;

Yes you do neeed the @ in the parmeter names but I do not think that you can use the SQL Parameter object to give a table a name as in your code. I modified your code as I have tested it on my syatem to work. try it this way.

Fernando
System.Data.SqlClient.SqlConnection Connection = new  System.Data.SqlClient.SqlConnection(ConnectionString);

Connection.Open();

String TableName = "Building";

System.Data.SqlClient.SqlCommand Command = Connection.CreateCommand();

Command.CommandType = CommandType.Text;

Command.CommandText = "UPDATE " + TableName + " SET Name = @Name WHERE Id = @Id";

Command.Parameters.Add("Id", SqlDbType.Int);

Command.Parameters.Add("Name", SqlDbType.VarChar);

Command.Parameters["Id"].Value = 1;

Command.Parameters["Name"].Value = "Inventory1";

Command.ExecuteNonQuery();

Open in new window

0
 

Author Comment

by:huangs3
ID: 24123373
Hi FernandoSoto:

    Thank you for your follow up. That means no smarter solution than string concatenation for this case. I will accept your answer.
0

Featured Post

Comprehensive Backup Solutions for Microsoft

Acronis protects the complete Microsoft technology stack: Windows Server, Windows PC, laptop and Surface data; Microsoft business applications; Microsoft Hyper-V; Azure VMs; Microsoft Windows Server 2016; Microsoft Exchange 2016 and SQL Server 2016.

Join & Write a Comment

For those of you who don't follow the news, or just happen to live under rocks, Microsoft Research released a beta SDK (http://www.microsoft.com/en-us/download/details.aspx?id=27876) for the Xbox 360 Kinect. If you don't know what a Kinect is (http:…
A long time ago (May 2011), I have written an article showing you how to create a DLL using Visual Studio 2005 to be hosted in SQL Server 2005. That was valid at that time and it is still valid if you are still using these versions. You can still re…
This tutorial demonstrates a quick way of adding group price to multiple Magento products.
This video demonstrates how to create an example email signature rule for a department in a company using CodeTwo Exchange Rules. The signature will be inserted beneath users' latest emails in conversations and will be displayed in users' Sent Items…

758 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

21 Experts available now in Live!

Get 1:1 Help Now