C# 从SQL SELECT查询在SQL server中创建Excel二进制文件
虽然我很清楚如何从SQL server创建Excel文件,但这一特殊要求是创建二进制文件,而无需保存到文件系统 伪代码如下所示:C# 从SQL SELECT查询在SQL server中创建Excel二进制文件,c#,sql,sql-server,excel,C#,Sql,Sql Server,Excel,虽然我很清楚如何从SQL server创建Excel文件,但这一特殊要求是创建二进制文件,而无需保存到文件系统 伪代码如下所示: DECLARE @ExcelBinaryData varbinary(max) SELECT * FROM someTable FOR EXPORT to @ExcelBinaryData string connectionString = "your connection string"; int id = 1; SqlConnection conn = new
DECLARE @ExcelBinaryData varbinary(max)
SELECT * FROM someTable FOR EXPORT to @ExcelBinaryData
string connectionString = "your connection string";
int id = 1;
SqlConnection conn = new SqlConnection(connectionString);
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
cmd.CommandText = "SELECT [ExcelData] FROM [SavedFiles] WHERE ID = @ID";
cmd.Parameters.AddWithValue("@ID", id);
SqlDataReader dr = cmd.ExecuteReader();
if (dr.Read())
{
byte[] bytes = (byte[])dr["ExcelData"];
Response.Buffer = true;
Response.Charset = "";
Response.AddHeader("content-disposition", @"attachment;filename=""file.xlsx""");
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
Response.BinaryWrite(bytes);
Response.End();
}
我想把这个二进制文件返回给C应用程序下载
对于不需要将文件保存到服务器的解决方案,我们将不胜感激。我知道如何保存文件,然后读取二进制文件。但这一要求是在不向文件系统写入任何内容的情况下执行
提前感谢。从数据库中选择二进制数据后,将其添加到响应中。 大概是这样的:
DECLARE @ExcelBinaryData varbinary(max)
SELECT * FROM someTable FOR EXPORT to @ExcelBinaryData
string connectionString = "your connection string";
int id = 1;
SqlConnection conn = new SqlConnection(connectionString);
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
cmd.CommandText = "SELECT [ExcelData] FROM [SavedFiles] WHERE ID = @ID";
cmd.Parameters.AddWithValue("@ID", id);
SqlDataReader dr = cmd.ExecuteReader();
if (dr.Read())
{
byte[] bytes = (byte[])dr["ExcelData"];
Response.Buffer = true;
Response.Charset = "";
Response.AddHeader("content-disposition", @"attachment;filename=""file.xlsx""");
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
Response.BinaryWrite(bytes);
Response.End();
}
请记住,这不是一个完整的解决方案,只是一个提示,我没有时间测试它。好的,为了防止其他人需要这样做,我已经决定妥协,使用OLE DB和ACE驱动程序写入Excel临时文件,然后发送到SQL。Excel文件操作如下所示 PS:如果你和我一样为主要客户编写代码,我们倾向于避免随机编写的库,因为这些库可能会给系统带来安全漏洞。此代码使用MS库,不使用其他外部源
string connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;c:\\someFile.xlsx";Extended Properties=\"Excel 12.0 Xml;HDR=NO;IMEX=1\"";
using (OleDbConnection conn = new OleDbConnection(connectionString))
{
conn.Open();
OleDbCommand cmd = new OleDbCommand();
cmd.Connection = conn;
cmd.CommandText = "CREATE TABLE [table1] (id INT, name VARCHAR, datecol DATE );";
cmd.ExecuteNonQuery();
cmd.CommandText = "INSERT INTO [table1](id,name,datecol) VALUES(1,'AAAA','2014-01-01');";
cmd.ExecuteNonQuery();
cmd.CommandText = "INSERT INTO [table1](id,name,datecol) VALUES(2, 'BBBB','2014-01-03');";
cmd.ExecuteNonQuery();
cmd.CommandText = "INSERT INTO [table1](id,name,datecol) VALUES(3, 'CCCC','2014-01-03');";
cmd.ExecuteNonQuery();
cmd.CommandText = "UPDATE [table1] SET name = 'DDDD' WHERE id = 3;";
cmd.ExecuteNonQuery();
conn.Close();
}
是的,当您将二进制文件保存在Excel中时,就很容易了。如上所述,我有一个SELECT语句,如SELECT name、USTERNAME,我想将其保存到Excel二进制文件并返回到我的C应用程序。我使用HttpMessage将二进制MIME类型的文件名发送到浏览器。我缺少的是需要从头创建的Excel二进制文件。这并不是那么简单。谷歌的NPOI库,你们会发现图书馆创建Excel文件。而且,我记得没错,您必须将创建的excel保存到文件系统。。。