2016-04-07 28 views
-1

Ben sütun adı ve tablo adı paramaters dinamik sorgu oluşturmak istiyorum.Dinamik SQL sorgu parametreleri ile C#

aşağıdaki 'Bu hata "Geçersiz nesne adını aşağıdaki bana verir

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; 
     } 

işlev geçirilen iki parametresinin tanımlanması @columnname i yarattık

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); 

yazdım kod ve @ Tabloadı olduğunu @ tableName " bildiriliyor. Komutu yürütürken parametre değerlerinin değiştirilmediği görünüyor. burada neyim eksik?

sayesinde Amol

cevap

1

Sadece kendi İlmek SQLs gözünde dize bir parçası olarak hafifçe SQLQuery dize ince ayar yapmanız gerekmektedir.

Buna Değişim ve aynı işlemi

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

Magic çalışması gerekir !! çok teşekkürler Richard. – amol

+0

Sorun değil amol –