添加列和 table 名称作为 SqlCommand 中的参数,如 "SELECT @col from @table" 查询

Add column and table name as parameters in SqlCommand like "SELECT @col from @table" queries

我正在开发一个应用程序,读取 MS-SQL 数据库中的表。通常这种工作方式是可以的:

sqlCommand.CommentText = $"SELECT {Col_Name} FROM {variable}";
sqlReader = sqlCommand.ExecuteReader();
while (sqlDataReader.Read())
{
    <retrieve> sqlDataReader.GetString(0); // this takes the value of Col_Name
}

然而,现在我正在使用 SELECT DISTINCT 查询,整个事情都出错了:

for (int i = 0; i< dt_main.Columns.Count - 1; i++) // dt_main is a DataTable, containing the columns.
                                                   // This is checked and working fine.
{
    string col_Name = dt_main.Columns[i].Caption; // This seems to be correct too.
    sqlCommand.CommandText = $"SELECT DISTINCT @col FROM {cmb_Table_Names.SelectedItem}"; 
                                   // cmb_Table_Names.SelectedItem contains the table name -> Ok.
    sqlCommand.Parameters.Clear(); // In the program, I'm always using the same 
                                   // sqlCommand object, so the parameters need to be cleared first.
    sqlCommand.Parameters.AddWithValue("col", col_Name);
    sqlDataReader = sqlCommand.ExecuteReader();
    string value_in_table = "";
    while (sqlDataReader.Read())
    { 
        value_in_table = sqlDataReader.GetString(0); // try read the distinct values.
                                                     // NOK: the column name is read instead.
    }
    sqlDataReader.Close();
}

从评论中可以看出,出错(NOK)的意思是value_in_table中设置的不是列里面的值,而是列的名称。
备注:我已经在 MS-SQL management studio 中尝试了 SELECT DISTINCT 查询,它工作正常。
备注2:我也做过绝望的实验value_in_table = sqlDataReader.GetString(1);,显然失败得很惨:-)

由于我是 SqlCommand 和相应的 SqlDataReader 的新人,昨天我被困在一个完全不可预见的问题上,我担心我又掉进了一些奇怪的陷阱。

有人知道我需要做什么才能读取值,而不是列名吗?

提前致谢

您不能将列名用作命令参数,将所有内容设为 sql 字符串

sqlCommand.CommandText = $"SELECT DISTINCT {col_name} FROM {cmb_Table_Names.SelectedItem}"; 

我确定 PO 知道 sql 注射。