Мне нужны метаданные из набора результатов MySQL, это возможно? - PullRequest
0 голосов
/ 21 декабря 2009

Я хотел бы получить метаданные из результатов запроса MySQL, чтобы я мог поместить их в таблицу данных в c #. Мне прежде всего нужно имя столбца и тип данных. Вот простой пример.

show columns from (
 select sum(subtotal) as subtotal
 , sum(tax1+tax2+tax3+tax4) as tax
 , sum(subtotal)+sum(tax1+tax2+tax3+tax4) as total

 from tbltransmaster 
 where batchnum in (
  SELECT BatchNum
  FROM tblshiftmaster

  WHERE ClosingTS <> -1

  ORDER BY OpeningTS ASC
 )
) as x

Это генерирует эту ошибку, хотя

Код ошибки: 1064 У вас есть ошибка в ваш синтаксис SQL; проверьте руководство, которое соответствует вашему серверу MySQL версия для правильного использования синтаксиса рядом "(

выберите сумму (промежуточный итог) в качестве промежуточного итога

, сумма (налог1 + налог2 + налог3 + налог4) в качестве налога

, сумма 'в строке 1

Может ли кто-нибудь дать мне какой-нибудь совет или, возможно, ссылку, чтобы помочь с этим?

1 Ответ

0 голосов
/ 21 декабря 2009

Показать столбцы работает только для реальных таблиц и представлений, но не для запросов.

Поскольку вы упоминаете C #, вы, вероятно, используете ADO.NET? Вы можете напрямую заполнить таблицу данных, в которой указаны типы данных и имена столбцов.

DbConnection conn = null;
DbConnection conn = null;
DbCommand cmd = null;
DbDataAdapter da = null;
DataTable tbl = new DataTable();

conn = new MySqlConnection(connectionString);
conn.Open();

cmd = conn.CreateCommand();
cmd.CommandText = query;

da = new MySqlDataAdapter();
da.SelectCommand = cmd;
da.Fill(tbl);

Если вы хотите получить только имена столбцов, вы можете получить результат, используя вместо этого DataReader:

DbDataReader dbReader = cmd.ExecuteReader();
for (int i = 0; i < dbReader.FieldCount; i++) {
  Type colType = dbReader.GetFieldType(i);
  String colName = dbReader.GetName(i);
}

DbDataReader также имеет .GetSchemaTable (), который возвращает DataTable, описывающий метаданные результата.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...