【发布时间】:2010-10-15 23:36:35
【问题描述】:
我过去曾使用以下代码将存储过程“HISTORICAL_COSTS”生成的数据集导出到 Excel。
Dim c As Long = 1
For Each dc As DataColumn In Me.WOCostDataSet. & _
HISTORICAL_COSTS.Columns
.Cells(1, c).Value = dc.ColumnName.ToString
.Cells(1, c).Font.Bold = True
c += 1
Next
Dim i As Long = 2
For Each dr As DataRow In Me.WOCostDataSet.HISTORICAL_COSTS.Rows
c = 1
For Each dc As DataColumn In Me.WOCostDataSet. & _
HISTORICAL_COSTS.Columns
.Cells(i, c).Value = dr.Item(dc.ColumnName).ToString
c += 1
Next
i += 1
Next
我正在尝试将此代码重新用于不同但相似的应用程序,但是,我遇到了问题。之前对这段代码的使用是在存储过程生成的 dBase 中的静态表上使用的。虽然这对于新应用程序基本上保持不变,但现在要求存储过程有一个输入参数,用户(通过 VB.net)在执行之前输入参数。对于一些背景故事,您可以在此处遵循已完成的过程 - Injecting a Parameter into Stored Procedure.
应用程序本身确实返回了一个完全填充的数据集,我希望我们的用户能够将生成的数据集导出到 Excel。所以,我设置了你的原型“导出我”按钮来开始这项肮脏的工作。
在引发事件时; Excel 打开,只有我的列名在整个工作表中重复。但是,这就是问题所在,代表行数据的单元格是空白的。
我得出的结论是(我承认我在这个假设中可能是错误的)行没有被填充,因为存储过程需要一个输入参数来执行它,并且没有该参数每行没有任何数据要返回。基本上意味着我的代码不适用于我正在尝试做的事情。
如果我的假设是正确的,关于如何将该参数放入上面的代码以便正确生成行的任何想法。
如果我错了,那么,任何关于我的逻辑或代码本身有什么问题的意见将不胜感激。
谢谢,
贾苏米安
斯坦,
这是生成数据集的代码:
Try
Dim FBConn As FbConnection
Dim MyConnectionString As String
MyConnectionString = "datasource=" _
& MyServer & ";database=" _
& TextBox4.Text & ";user id=SYSDBA;password=" _
& MyPassword & ";initial catalog=;Charset=NONE"
FBConn = New FbConnection(MyConnectionString)
Dim FBCmd As New FbCommand("HISTORICAL_COSTS", FBConn)
FBCmd.CommandType = CommandType.StoredProcedure
FBCmd.Parameters.Add("@I_PN", FbDbType.VarChar, 40)
FBCmd.Parameters("@I_PN").Value = TextBox1.Text.ToUpper
Dim FBadapter As New FbDataAdapter(FBCmd)
Dim dsResult As New DataSet
FBadapter.Fill(dsResult)
Me.HISTORICAL_COSTSDataGridView.DataSource = dsResult.Tables(0)
Dim RecordCount As Integer
RecordCount = Me.HISTORICAL_COSTSDataGridView.RowCount
Label4.Text = RecordCount
Catch ex As System.Exception
System.Windows.Forms.MessageBox.Show _
("There was an error in generating the DataStream, " & _
"please check the system credentials and try again. " & _
"If the problem persists, please contact your friendly " & _
"local IT department.")
End Try
Stackoverflow 建议我向任何回答我的问题的人提供赏金,但是,由于我没有足够的 REP 来创建足够的赏金 - 我无所不包的感激之情是否会赢得任何编码的爱?
一些快速更新:
我通过更改存储过程将结果注入到一个新的单独表中来测试我的应用程序,然后针对该表运行我的 excel 导出 - 它工作正常。但是,由于许多人将同时使用该应用程序,因此这不是一个可行的解决方案。
所以,我重新相信这个数据集实例存在问题,需要一个参数才能正确运行以进行导出。
很高兴尽我所能回答所有问题。
【问题讨论】:
-
这对我来说有点模糊。这个参数是从哪里来的?在你根据假设做某事之前,还要确保你的假设是正确的。我的意思是:尝试一些调试,收集确凿的证据。
-
抱歉信息含糊,我尽量做到详细。无论如何,参数来自 vb 应用程序本身,然后传递到我用来生成 DataSet 的存储过程 HISTORICAL_COSTS。但是,调试仍在继续,因为它已经进行了一天半了 :)
标签: vb.net excel stored-procedures dataset firebird