VB.NET执行存储过程 - 编辑

时间:2017-08-16 12:59:50

标签: asp.net asp.net-mvc vb.net stored-procedures

我将数据库信息导出到VB.NET MVC项目中的excel文件中。

我已经完成了excel部分,并且我能够将硬代码表导出到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()

编辑----我遇到的问题是找出用于运行存储过程的语法和值,该存储过程具有返回值并能够遍历它并获取行值。我已经完成了大量的谷歌搜索,而且大多数都存储了没有返回值的存储过程或者返回了一个值的查询,而且我返回了很多字段。

我运行的存储过程如下所示:

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

编辑2 ----我不完全确定如何回答我正在使用的数据库连接。我在Web配置中有一个连接字符串,我使用的是实体框架,所以我的大多数代码都像

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

2 个答案:

答案 0 :(得分:0)

至于您的示例查询,我会使用View进行简单的数据操作......

如果要修改数据库中的数据,那么存储过程就很方便,可以在SQL查询中轻松执行...

EXEC dbo.MyStoredProc @MyKeyNo

它不以这种方式返回数据,数据在DB中被修改。

答案 1 :(得分:0)

感谢@ADyson,虽然你提供的代码还有更多东西,但它的基础对我有用。

我的一个主要问题是我实际上并不知道我必须为excel表制作一个模型才能让我的字段导出。显然我的存储过程没有被转移,所以我需要做原始的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

感谢所有试图帮助我理解我正在做什么的人!