2017-11-26 3 views
1

Ich versuche, eine Funktion zu erstellen, die eine Tabelle auffüllt, wenn der Name der Tabelle angegeben wird und nach welchem ​​Parameter sie sortiert werden soll.System.Data.SqlClient.SqlException: Falsche Syntax in der Nähe von "="

Ich denke, ich mache gerade einen Syntaxfehler in meinem SQL-Befehl, aber ich kann es nicht finden. Bitte helfen Sie.

public DataTable populateTable(string tableName, string orderByParameter) 
{ 
    DataTable table = new DataTable(); 
    string connString = ConfigurationManager.ConnectionStrings["ConnectionString"].ToString(); 
    string cmdString = "SELECT * FROM (value = @tbl) ORDER BY (parameter = @obp) DESC"; 
    using (SqlConnection conn = new SqlConnection(connString)) 
    { 
     using (SqlCommand cmd = new SqlCommand()) 
     { 
      cmd.Connection = conn; 
      cmd.CommandText = cmdString; 
      cmd.Parameters.AddWithValue("@tbl", tableName); 
      cmd.Parameters.AddWithValue("@obp", orderByParameter); 
      using (SqlDataAdapter ad = new SqlDataAdapter(cmd)) 
      { 
       ad.Fill(table); 
      } 
     } 
     try 

     { 
      GridView1.DataSource = table; 
      GridView1.DataBind(); 
      return table; 
     } 
     catch (Exception e) 
     { 
      Console.WriteLine(e.Message); 
      return null; 
     } 
    } 
} 

Antwort

2

Sie können keine Variablen im Tabellennamen oder in der 'order by' Klausel haben.

Sie könnten die Abfrage erstellen dynamisch:

string cmdString = "SELECT * FROM [" + tableName + "] ORDER BY " + orderByParameter +" DESC"; 

Damit Sie nicht die Parameter @tbl und @obp auf den Befehl hinzufügen müssen.

Beachten Sie, dass dies zu SQL Injection-bezogenen Sicherheitsanfälligkeiten führt. Sie sollten dies also nur tun, wenn Sie absolut sicher sind, dass die Tabelle mit dem angegebenen Namen existiert, und orderByParameter ist ein gültiger Ausdruck.

+0

Vielen Dank für die Entlastung meines Kopfes kratzen für die Nacht. – Warstra

Verwandte Themen