отбор из базы по содержимому
Есть таблица в базе содержимое ее таково:
все колонки button имеют тип булиан tinyint(1) в основной программе пытаюсь сделать запрос и вытащить по id содержимое ячеек, что бы в зависимости от 1 или 0 выключить видимость кнопок на форме.
есть код, который вытаскивает наименования колонок, как теперь сделать отбор что бы выбрать наименования колонок содержимое которых =1:
MySqlCommand cmd;
MySqlDataReader dr;
MySqlConnection conn2 = DBUtils.GetDBConnection();
cmd = new MySqlCommand();
cmd.Connection = conn2;
DataTable schema = null;
{
using (var schemaCommand = new MySql.Data.MySqlClient.MySqlCommand("SELECT * FROM subscribe WHERE id='A320M-H-CF191289456911'", conn2))
{
conn2.Open();
using (var reader = schemaCommand.ExecuteReader(CommandBehavior.SchemaOnly))
{
schema = reader.GetSchemaTable();
}
}
}
foreach (DataRow col in schema.Rows)
{
//return col.Field<String>("ColumnName");// возврат имени колонок
cmd.CommandText = "SELECT * FROM subscribe WHERE id='A320M-H-CF191289456911' ";
// вот собственно и вопрос как отобрать ?
dr = cmd.ExecuteReader();
if (dr.Read())
{
MessageBox.Show(col.Field<String>("ColumnName"));
MessageBox.Show("успех!");
}
else
{
}
dr.Close();
}
Ответы (1 шт):
Автор решения: Виктор Юхимчук
→ Ссылка
решил элегантнее, для начала списком вытаскиваю наименования лист всех колонок -
public List<string> gelstring()
{
string index_;
string name;
List<string> ret = new List<string>();
MySqlConnection connection = подключение к базе
try
{
string sqlExpression = "SELECT * FROM *где-то* WHERE id = *что-то*' ";
connection.Open();
MySqlCommand command = new MySqlCommand(sqlExpression, connection);
MySqlDataReader reader = command.ExecuteReader();
while (reader.Read())
{
for (int i = 1; i < reader.FieldCount; i++)
{
index_ = reader.GetValue(i).ToString();
name = reader.GetName(i).ToString();
ret.Add(name);
ret.Add(index_);
}
}
return ret;
}
finally
{
connection.Close();
}
}
ну и вторая функция, которая берет получившийся список и в зависимости от 1 / 0 хранящейся по наименованию колонки совпавшей с котролами на форме вкл / выкл
public void subscribe_controls(Form forma)
{
string[] array_name = gelstring().Select(n => n.ToString()).ToArray();
for (int i = 0; i < gelstring().Count; i++)
{
for (int j = 0; j < forma.Controls.Count; j++)
{
if (forma.Controls[j].Name == array_name[i])
{
i++;
forma.Controls[j].Visible = Convert.ToBoolean(array_name[i]);
}
}
}
}
