[Okta Webinar] Learn how to a build a cloud-first strategyRegister Now

x
?
Solved

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

Posted on 2009-04-11
4
Medium Priority
?
402 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 64

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 64

Accepted Solution

by:
Fernando Soto earned 2000 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

Concerto's Cloud Advisory Services

Want to avoid the missteps to gaining all the benefits of the cloud? Learn more about the different assessment options from our Cloud Advisory team.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

This article explains how to reset the password of the sa account on a Microsoft SQL Server.  The steps in this article work in SQL 2005, 2008, 2008 R2, 2012, 2014 and 2016.
Real-time is more about the business, not the technology. In day-to-day life, to make real-time decisions like buying or investing, business needs the latest information(e.g. Gold Rate/Stock Rate). Unlike traditional days, you need not wait for a fe…
This Micro Tutorial will teach you how to add a cinematic look to any film or video out there. There are very few simple steps that you will follow to do so. This will be demonstrated using Adobe Premiere Pro CS6.
Look below the covers at a subform control , and the form that is inside it. Explore properties and see how easy it is to aggregate, get statistics, and synchronize results for your data. A Microsoft Access subform is used to show relevant calcul…

872 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