2016-04-07 11 views
-1

Ich möchte die dynamische Abfrage erstellen, wobei Spaltenname und Tabellenname Paramater sind.Dynamische SQL-Abfrage mit Parametern in C#

Folgenden ist der Code, den ich geschrieben habe

string query = "DECLARE @sqlQuery varchar(max); " + 
           " SELECT @sqlQuery = 'select distinct [@columnName] from [" + Globals.REPORTING_SCHEMA + "].[@tableName]'; " + 
           " exec(@sqlQuery);"; 

       List<SqlParameter> parametersList = new List<SqlParameter>(); 

       SqlParameter param = new SqlParameter(); 

       param.ParameterName = "tableName"; 

       param.SqlDbType = System.Data.SqlDbType.VarChar; 

       param.Value = request.TableName; 

       parametersList.Add(param); 

       param = new SqlParameter(); 

       param.ParameterName = "columnName"; 

       param.SqlDbType = System.Data.SqlDbType.VarChar; 

       param.Value = request.ColumnName; 

       parametersList.Add(param); 

       SQLHelpher sqlHelper = new SQLHelpher(networkConnectionString); 

       SqlDataReader dataReader = sqlHelper.ExecuteReader(query, parametersList); 

Ich habe erstellt zwei paramters @columnname und @tablename die

public SqlDataReader ExecuteReader(string sql, List<SqlParameter> parametersList = null) 
     { 
      SqlConnection conn = new SqlConnection(); 

      conn.ConnectionString = this._connectionString; 

      conn.Open(); 

      SqlCommand cmd = new SqlCommand(); 

      cmd.Connection = conn; 

      cmd.CommandText = sql; 

      cmd.CommandType = CommandType.Text; 

      if (parametersList != null) 
      { 
       foreach (SqlParameter p in parametersList) 
       { 
        cmd.Parameters.Add(p); 
       } 
      } 

      SqlDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection); 

      return reader; 
     } 

an Funktion übergeben das gibt mir folgende Fehler „Ungültige Objektnamen ' Reporting. @ TableName " Es scheint, dass Parameterwerte nicht während der Ausführung des Befehls ersetzt werden. Was fehlt mir hier?

Danke, Amol

Antwort

1

Sie müssen nur leicht Ihre SQLQuery Zeichenfolge zwicken als Paramater ein Teil der Zeichenfolge in SQLs Augen sind.

ändern es dazu, und es sollte

string query = "DECLARE @sqlQuery varchar(max); " + 
           " SELECT @sqlQuery = 'select distinct [' + @columnName + '] from [" + Globals.REPORTING_SCHEMA + "].[' + @tableName + ']'; " + 
           " exec(@sqlQuery);"; 
+0

Magie arbeiten !! Vielen Dank Richard. – amol

+0

Kein Problem amol –