2017-02-16 5 views
0

SQLサーバからExcelファイルを作成する方法をよく知っていますが、この特定の要件はファイルシステムに保存することなく、BINARIESを作成することです。SQL SELECTクエリからSQLサーバにExcelバイナリを作成する

擬似コードこのような何か:私は、このバイナリは、ダウンロードのためのC#アプリケーションに返すことにしたい

DECLARE @ExcelBinaryData varbinary(max) 
SELECT * FROM someTable FOR EXPORT to @ExcelBinaryData 

ファイルをサーバーに保存する必要がないソリューションを歓迎します。私はファイルを保存してバイナリを読む方法を知っています。しかし、この要件は、ファイルシステムへの書き込みなしで実行することです。

ありがとうございます。

答えて

1

データベースからバイナリデータを選択したら、それをレスポンスに追加します。このような 何か:これは完全なソリューション、単なるヒントではないことを念頭に置いて

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(); 
} 

クマ(と私はそれをテストする時間がありませんでした)。

+0

はい、バイナリをExcelに保存しておくと簡単です。上記のように、私は "SELECT name、surname FROM users"のようなSELECT文をExcelバイナリに保存してC#appに戻したいと思っています。 HTTPMessagingを使用して、バイナリ、MIMEタイプ、ファイル名をブラウザに送信します。最初から作成する必要のあるExcelバイナリが欠けています。 –

+0

それほど単純ではありません。 Google for NPOIライブラリには、Excelファイルを作成するためのライブラリがあります。そして、私は正しく覚えている、あなたはファイルシステムに作成エクセルを保存する必要があります... – Nino

0

他の人がこれを行う必要がある場合に備えて、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(); 
      } 
関連する問題