[英]Export SQL Server Data into CSV file
我正在尝试将数据从 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<string> 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 输出。 您需要确保处理嵌入的逗号、返回字符等,如果它们出现在任何输出中。 不过,这很容易做到。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.