C# 从MVC应用程序直接进行SQL搜索
我正在尝试实现以下功能: 执行SQL存储过程;它获取数据库中所有表的名称。此存储过程当前在MVC应用程序中显示为下拉列表。我希望客户端能够从列表中查询选定的表,例如,如果从列表中选择了组织表,并且用户输入Id=5并提交,这将生成一个逗号分隔的行,将其写入CSV文件中。完成导出后,CSV文件的名称应为表名,创建包含此CSV文件的ZIP文件 我真的卡住了,请帮忙。非常感谢 多谢各位 到目前为止,我已经完成了存储过程部分:C# 从MVC应用程序直接进行SQL搜索,c#,asp.net,sql,asp.net-mvc,asp.net-mvc-4,C#,Asp.net,Sql,Asp.net Mvc,Asp.net Mvc 4,我正在尝试实现以下功能: 执行SQL存储过程;它获取数据库中所有表的名称。此存储过程当前在MVC应用程序中显示为下拉列表。我希望客户端能够从列表中查询选定的表,例如,如果从列表中选择了组织表,并且用户输入Id=5并提交,这将生成一个逗号分隔的行,将其写入CSV文件中。完成导出后,CSV文件的名称应为表名,创建包含此CSV文件的ZIP文件 我真的卡住了,请帮忙。非常感谢 多谢各位 到目前为止,我已经完成了存储过程部分: SELECT TABLE_NAME FROM INFORMATION_SCH
SELECT TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'BASE TABLE'
有太多的问题要回答,所以我会给你一些提示。我假设你已经让存储过程工作了,尽管你可能想要一个存储过程来动态地执行一个查询,但这太狡猾了 我应该提到csvwriter的输出是一个逗号分隔的列表。因此,当您执行存储过程时,希望沿着这些行遍历返回的行
public ActionResult DownloadCsv()
{
using (var memStream = new MemoryStream())
{
using (var streamWriter = new StreamWriter(memStream))
{
var writer = new CsvWriter(streamWriter);
using (var conn = new SqlConnection(CONNECTION_STRING))
{
var command = new SqlCommand("YourStoredProcedure", conn);
command.CommandType = CommandType.StoredProcedure;
command.Parameters.AddWithValue("@id", id);
conn.Open();
using (SqlDataReader reader = command.ExecuteReader())
{
while (reader.Read())
{
for (int i = 0; i < reader.FieldCount; i++)
{
Console.WriteLine(reader.GetValue(i));
writer.WriteField(reader.GetValue(i));
}
writer.NextRecord();//you must also do this ALWAYS otherwise your .WriteFields wont be output for the current line
}
}
}
streamWriter.Flush();//note: you must flush
return File(memStream.ToArray(), "text/csv", "My 1337 download name.csv");
}
}
}
我们需要缩小这个问题的范围。实际上,听起来您要问三个不同的问题,如何调用存储过程,如何编写csv文件,如何编写zip文件。首先关注下一步,即如何调用存储过程。这可能会有帮助:谢谢,我会尝试你的指示,Zip文件需要下载,但由于这是最后一步,只要我先完成其他步骤就行。我会通知你的再次感谢干杯
public ActionResult DownloadCsv()
{
using (MemoryStream zippedDownloadStream = new MemoryStream())
{
using (ZipFile zip = new ZipFile())
{
using (var writerMemoryStream = new MemoryStream())
{
using (var streamWriter = new StreamWriter(writerMemoryStream))
{
var writer = new CsvWriter(streamWriter);
//your writing
streamWriter.Flush();
}
zip.AddEntry("awesome file name.csv", writerMemoryStream.ToArray());
zippedDownloadStream.Flush();
zip.Save(zippedDownloadStream);
return File(zippedDownloadStream.ToArray(), "application/zip", "zippedup.zip");
}
}
}
}