如何使用C#应用程序从mysql服务器导出csv文件并获取导出的csv文件顶部的所有列名

时间:2016-02-17 10:21:29

标签: c# mysql csv

我找了一个类似的问题,但没有找到解决我问题的方法。我开发了一个与mysql服务器通信的C#程序。

我尝试将表从mysql服务器导出到csv文件,包括顶部每列的名称。它正在工作,但这是一个问题。当我使用以下代码时:

string query = "SELECT /*here i insert column names*/ 
UNION SELECT /*here i insert column names*/ 
FROM `tableName` INTO OUTFILE /*here I insert the path*/ 
\ FIELDS TERMINATED BY ';' LINES TERMINATED BY '\n'";

它有效,但我必须写每一列。有可能避免这种情况吗?所以我可以使用*运算符,如下所示:

string query = "SELECT * 
UNION SELECT * 
FROM `tableName` INTO OUTFILE /*here I insert the path*/ 
\ FIELDS TERMINATED BY ';' LINES TERMINATED BY '\n'";

因为本规范对我不起作用。

1 个答案:

答案 0 :(得分:1)

您可以使用以下语句从表中获取所有列名:

SELECT COLUMN_NAME, ORDINAL_POSITION FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'Bundle'

导出行 - >使用上述语句获取所有列名称 - >使用C#

将结果写入文件的开头

我就是这样做的。另一种可能性是动态枢轴,这要复杂得多。

修改

由于OP提到他可能无法访问导出的文件,因此这是一个快速而肮脏的声明,可以实现想要的结果:

DECLARE @DataList varchar(500);
SELECT @DataList = COALESCE(@DataList + ',', '') + 'CAST(' + COLUMN_NAME + ' AS varchar(255))'
FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'YOURTABLE'

DECLARE @PivotList varchar(500);
SELECT @PivotList = COALESCE(@PivotList + ',', '') + COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'YOURTABLE'

DECLARE @GroupList varchar(500);
SELECT @GroupList = COALESCE(@GroupList + ',', '') + 'MIN(CAST(' + COLUMN_NAME + ' AS varchar(255)))'
FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'YOURTABLE'

DECLARE @Query varchar(1000)
SET @Query = '
SELECT ' + @GroupList + ' FROM INFORMATION_SCHEMA.COLUMNS 
PIVOT
(MAX(COLUMN_NAME) FOR COLUMN_NAME IN (' + @PivotList + ')) AS B
WHERE TABLE_NAME = ''YOURTABLE''
GROUP BY TABLE_NAME
UNION ALL
SELECT ' + @DataList + ' FROM YOURTABLE'
EXEC (@Query)

我希望这适合你!

问候。