2017-08-16 16 views
0

データベース情報をVB.NET MVCプロジェクトのExcelファイルにエクスポートしています。VB.NETストアプロシージャの実行 - 編集

私はExcelの部分を実行しており、ハードコードテーブルをExcelに書き出すことができます。しかし、私は自分のデータベースのフィールドでそのテーブルを埋める必要があります。私は必要なすべての情報を取得するストアドプロシージャを持っていますが、実行するのに問題があり、必要なフィールドを必要な順番に配置することができます。

これが私のエクセルシートを作る方法です。

Dim blah = New DataTable("testing") 
blah.Columns.Add("Col1", Type.GetType("System.String")) 
blah.Columns.Add("Col2", Type.GetType("System.String")) 

'Below will be switched out for table data, this is where the try for the SQL will end up 

blah.Rows.Add(1, "hello") 
blah.Rows.Add(2, "hello") 
blah.Rows.Add(3, "hello") 
blah.Rows.Add(4, "hello") 

Dim grid = New GridView() 
grid.DataSource = blah 
grid.DataBind() 

Response.ClearContent() 
Response.Buffer = True 
Response.AddHeader("content-disposition", "attachment; filename=Test-Report.xls") 
Response.ContentType = "application/ms-excel" 
Response.Charset = "" 

Dim sw = New StringWriter() 
Dim htw = New HtmlTextWriter(sw) 

grid.RenderControl(htw) 

Response.Output.Write(sw.ToString()) 
Response.Flush() 
Response.End() 

EDIT ----私は、戻り値を持っており、それを反復処理し、行の値を取ることができるというストアドプロシージャを実行するために使用する構文と値を考え出すとの問題を抱えています。私は大量のGoogle検索を行いました。ほとんどの場合、戻り値を持たないプロシージャが格納されています。または、1つの値が戻された問合せがあり、多くのフィールドを戻しています。

私はこのようになります実行しているストアドプロシージャ:

SELECT 
    i.insurer_name 
    ,cs.customer_name 
    ,cs.customer_address 
    ,cs.claim_number 
    ,cs.work_type 
    ,anu.FirstName 
    ,anu.LastName 
    ,l.location_name 
    ,cs.completed_date 
    ,q.question_text 
    ,a.answer_text 
FROM insurer i 
inner join completed_survey cs on cs.insurer_id = i.insurer_id 
inner join AspNetUsers anu on anu.Id = cs.user_id 
inner join location l on l.location_id = cs.location_id 
inner join answer a on a.complete_id = cs.completed_id 
inner join question q on q.question_id = a.question_id 
ORDER BY i.insurer_name, cs.survey_score desc 

EDIT 2 ----私は私が使用しているどのようなDB接続答える方法を全くわかりません。私は、Webの設定で接続文字列を持っているし、自分のコードのほとんどはあなたのサンプルクエリについては

Private db As New SurveyDBModel 
db.table_name.ToList() 
db.table_name.Add(new_row) 
+0

あなたはSPを実行しようとしていますか?また、[ストアドプロシージャの実行](https://stackoverflow.com/questions/5991877/execute-a-sql-stored-procedure-and-process-the-results)の重複した複製 –

+1

しかし、私はそれを取得することができませんrun_ - あなたが抱えている問題について具体的に記述してください。 "私は問題を抱えています"とは、有効な問題文ではありません。 –

+0

どのDB接続ライブラリを使用していますか? DBに接続して手順を実行する際に使用しているコードを表示してください。 ADO.NETを使用している場合、通常は結果を直接DataSetまたはDataTableに数行でエクスポートできます。また、RDBMSとは何ですか? SQLサーバー? – ADyson

答えて

0

@ADysonのおかげで、あなたが提供したコードにはもう少しのものがありましたが、その基礎は私のために働いていました。

私の主な問題の1つは、エクセルシート用のモデルをエクスポートしてフィールドをエクスポートできるようにしなければならないということを実際には知りませんでした。また、私のストアドプロシージャは転送されていないので、生のSQLを実行する必要があります。

はここで働くことになったものの基礎です:

Dim blah = New DataTable("insurer") 
blah.Columns.Add("Insurer Name", Type.GetType("System.String")) 
blah.Columns.Add("Col2", Type.GetType("System.String")) 

Using db As New SurveyDBModel() 

Dim rsInsurer = db.Database.SqlQuery(Of report)("SELECT 
i.insurer_name ,cs.customer_name ,cs.customer_address ,cs.claim_number ,cs.work_type ,anu.FirstName ,anu.LastName ,l.location_name ,cs.completed_date ,q.question_text ,a.answer_text 
FROM insurer i 
inner join completed_survey cs on cs.insurer_id = i.insurer_id 
inner join AspNetUsers anu on anu.Id = cs.user_id 
inner join location l on l.location_id = cs.location_id 
inner join answer a on a.complete_id = cs.completed_id 
inner join question q on q.question_id = a.question_id 
ORDER BY i.insurer_name, cs.survey_score desc").ToList() 

For Each item In rsInsurer 
    blah.Rows.Add(item.insurer_name, "Bye") 
Next 

End Using 

は私がちょっと私が何をしていたかを理解する手助けしようとしたすべての人々に感謝します!

0

のようなものですので、私はそのような単純なデータ操作のためのViewを使用したい、エンティティフレームワークを使用しています。 ..

あなたがDB内のデータを変更したい場合は

、それは、この方法のデータを、データを返さない

EXEC dbo.MyStoredProc @MyKeyNo 

...その後、ストアドプロシージャは便利来ると簡単にSQLクエリ内から実行されますDB内で変更されます。

関連する問題