【问题标题】:VB.NET Executing a store procedure - EditVB.NET 执行存储过程 - 编辑
【发布时间】:2017-08-16 12:59:50
【问题描述】:

我正在将数据库信息导出到 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()

EDIT---- 我在弄清楚用于运行具有返回值并能够遍历它并获取行值的存储过程的语法和值时遇到问题。我已经进行了大量的谷歌搜索,并且大多数都有没有返回值的存储过程或返回一个值的查询,并且我返回了很多字段。

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

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 ---- 我不完全确定如何回答我正在使用的数据库连接。我在网络配置中有一个连接字符串,并且我正在使用实体框架,所以我的大部分代码都是这样的

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

【问题讨论】:

  • 您在哪里尝试执行 SP?此外,Execute Stored Procedure 的可能副本
  • 但我无法让它运行 - 请具体说明您遇到的问题。 “我遇到了麻烦”不是有效的问题陈述。
  • 您使用的是什么数据库连接库?请显示您用于连接数据库并执行该过程的代码。如果您使用的是 ADO.NET,通常只需几行即可将结果直接导出到 DataSet 或 DataTable。还有什么 RDBMS 是什么? SQL Server?
  • “我不完全确定如何回答我正在使用的数据库连接”...然后您说“实体框架”,这是对该问题的有效答案。 EF 是一个用于连接数据库的 ORM 库。您仍然没有说它是哪个 RDBMS,但幸运的是,EF 充分抽象了事物,使其在很大程度上变得无关紧要。
  • 您应该能够调用(SQL Server)存储过程,例如:using (var db = new YourEntitiesObject()) { object[] paramList = new object[1]; paramList[0] = new SqlParameter("someParameter", someVariable); return db.Database.SqlQuery<YourModelClass>("[YourSchemaName].[YourProcedureName] @someParameter", paramList).ToList(); },它将直接将结果序列化为您指定的类型。

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


【解决方案1】:

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

如果您想修改 DB 中的数据,那么存储过程就派上用场了,并且可以在 SQL 查询中轻松执行...

EXEC dbo.MyStoredProc @MyKeyNo

这种方式不返回数据,数据是在DB中修改的。

【讨论】:

    【解决方案2】:

    感谢@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
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多