2016-04-07 44 views
-1

カラム名とテーブル名がパラメタである動的クエリを作成したいと考えています。次c#のパラメータを持つ動的SQLクエリ

は、私は、これはエラー 「無効なオブジェクト名 'は、次の私を与え

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

を機能するように渡された2つの偶然にの@columnnameと@tablenameを作成している私は

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

を書かれているコードです@ tableName " コマンドを実行中にパラメータ値が置き換えられていないようです。ここで私は何が欠けていますか?

おかげで、 て、Amol

答えて

1

は、あなたは自分のPARAMATERSは、SQL文の目には文字列の一部である、わずかとしてあなたのSQLQuery文字列を微調整する必要があります。

これに変更し、それを、それが

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

魔法を動作するはずです!リチャードに感謝します。 – amol

+0

問題なし –

関連する問題