将SQL Server数据导出为CSV文件

我试图从sql server导出数据到csv文件。 我在网上和其他支持论坛寻求帮助,但我找不到如何做到这一点? 我已经编写了自己的代码,但它不起作用 – 它只是继续加载……而且失败了。

请帮忙。 这是我写的代码。

SqlConnection sqlCon = new SqlConnection("REMOVED"); string fileName = "test.csv"; SqlCommand sqlCmd = new SqlCommand(); sqlCmd.CommandText = "Select * from products.products"; sqlCmd.Connection = sqlCon; sqlCon.Open(); using (var CommandText = new SqlCommand("select * from products.products")) using (var reader = sqlCmd.ExecuteReader()) using (var outFile = File.CreateText(fileName)) { string[] columnNames = GetColumnNames(reader).ToArray(); int numFields = columnNames.Length; outFile.WriteLine(string.Join(",", columnNames)); if (reader.HasRows) { while (reader.Read()) { string[] columnValues = Enumerable.Range(0, numFields) .Select(i => reader.GetValue(i).ToString()) .Select(field => string.Concat("\"", field.Replace("\"", "\"\""), "\"")) .ToArray(); outFile.WriteLine(string.Join(",", columnValues)); } } } } private IEnumerable GetColumnNames(IDataReader reader) { foreach (DataRow row in reader.GetSchemaTable().Rows) { yield return (string)row["ColumnName"]; } } 

对于它的价值,如果你想要的只是进行查询并将内容转储到某个地方,看起来你做的工作比你要多得多。 复杂性可能会增加调试中的挑战。

读取查询并将输出定向到文件的一个非常简单的示例可能如下所示:

  SqlConnection sqlCon = new SqlConnection("REMOVED"); sqlCon.Open(); SqlCommand sqlCmd = new SqlCommand( "Select * from products.products", sqlCon); SqlDataReader reader = sqlCmd.ExecuteReader(); string fileName = "test.csv"; StreamWriter sw = new StreamWriter(fileName); object[] output = new object[reader.FieldCount]; for (int i = 0; i < reader.FieldCount; i++) output[i] = reader.GetName(i); sw.WriteLine(string.Join(",", output)); while (reader.Read()) { reader.GetValues(output); sw.WriteLine(string.Join(",", output)); } sw.Close(); reader.Close(); sqlCon.Close(); 

虽然它可能看起来并不比你列出的代码短得多,但我认为它更简单,并且更容易调试,开箱即用。 我没有测试过这个,所以我不能肯定地说它有效,尽管我认为它非常接近。

值得一提的另一件事......这些都不是真正的CSV输出。 如果它们在任何输出中,您需要确保处理嵌入式逗号,返回字符等。 但这很容易做到。