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

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
huangs3Asked:
Who is Participating?

[Webinar] Streamline your web hosting managementRegister Today

x
 
Fernando SotoConnect With a Mentor RetiredCommented:
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
 
Fernando SotoRetiredCommented:
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
 
huangs3Author Commented:
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
 
huangs3Author Commented:
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
All Courses

From novice to tech pro — start learning today.