不知道如何从 vb.net 2013 读取 sp
Posted
技术标签:
【中文标题】不知道如何从 vb.net 2013 读取 sp【英文标题】:Don't know how to read a sp from vb.net 2013 【发布时间】:2014-06-19 15:33:40 【问题描述】:我有一个将变量列作为表返回的存储过程。我需要将此输出放在DataGridView
中。谁能帮帮我?
我在 Windows 8.1 上使用 SQL Server 2012 Express 和 Visual basic 2013
ALTER PROCEDURE [dbo].[sp_Pivot]
@Dias varchar(4),
@Rubro varchar(1)
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
DECLARE @Cols AS NVARCHAR(MAX) = '';
DECLARE @Query AS NVARCHAR(MAX);
SELECT @Cols += STUFF((SELECT DISTINCT ',' + QUOTENAME(Linea) FROM TablaByModel WHERE
Rubro = @Rubro FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 1, '');
SELECT @Query = 'SELECT * FROM (SELECT [AAAAMM] AS [AAAAMM], [Linea] AS [Linea],
' + @Dias + ' as [Dias] FROM [TablaByModel] o ) AS t
PIVOT
(AVG(Dias) FOR Linea IN( ' + @cols + ' )' + ' ) AS p ; ';
EXECUTE(@Query);
END
输出是这样的:
AAAAMM A78 A79P Plus TC TC2
--------------------------------------------
201010 7
201104 90
201105 94
201106 43 46 41 38
201107 34 35 35 32
201108 14 11 11 16
201109 43 10 12 119
201110 155 10 12 9 6
201111 23 37 15 10
201112 34 26 13 23
名称列可能会有所不同。
我尝试使用的 VB 代码是:
' Dim con As SqlConnection = New SqlConnection("Data Source=server\sqlexpress;Initial Catalog=MyDataBase;Integrated Security=True")
' Dim p As SqlClient.SqlParameter
' Dim cmd As New SqlClient.SqlCommand("SP_Pivot", con, Nothing)
' Dim adapter As New SqlClient.SqlDataAdapter
' Dim table As New DataTable
' Dim reader As SqlDataReader
' cmd.CommandType = CommandType.StoredProcedure
' con.Open()
' 'Fill the parameters
' p = cmd.Parameters.Add("@Dias", SqlDbType.VarChar, 4)
' p.Value = "Dias"
' p = cmd.Parameters.Add("@Rubro", SqlDbType.VarChar, 10)
' p.Value = "H"
' 'Assign the select command
' adapter.Selectcommand = cmd
' 'Fill the datatable
' Try
' ' adapter.Fill(table)
' reader = cmd.ExecuteReader()
' Catch ex As System.Exception
' MessageBox.Show(ex.GetBaseException.Message)
' End Try
' 'DataGridView1.DataSource = reader
' con.Close()
【问题讨论】:
【参考方案1】:问题是您应该将DataGridView1.DataSource
传递给DataTable
,但您将SqlDataReader
从cmd.ExecuteReader()
传递给它。查看DataGridView.DataSource
的文档以了解它接受的内容。
无论如何,您需要在调用adapter.Fill(table)
之后将DataSource
设置为table
。
【讨论】:
我无法执行 Fill 方法或不知道如何执行。生成时的 tableadapter 不要创建此方法,也不要让我创建一个。对不起我的英语。 你已经调用它了:'Fill the datatable Try adapter.Fill(table) reader = cmd.ExecuteReader() Catch ex As System.Exception MessageBox.Show(ex.GetBaseException.Message) End Try 我使用助手创建DataSource并选择sp,当我使用预览数据时可以看到表格。但是当我使用代码时,我什么也看不到。我不知道其他方式可以看到它。 感谢您的帮助 j.i.h.【参考方案2】:我这样解决问题: 点点滴滴 参数...
Try
Conn.Open()
Dim myReader As SqlDataReader = cmd.ExecuteReader()
Dim NroReg As Integer = myReader.FieldCount - 1
Dim dt As New DataTable
dt.Load(myReader)
DataGridView1.AutoGenerateColumns = True
DataGridView1.DataSource = dt
DataGridView1.Refresh()
Catch ex As Exception
MessageBox.Show(ex.Message, "Error")
Finally
If Conn.State = ConnectionState.Open Then
Conn.Close()
End If
End Try
【讨论】:
以上是关于不知道如何从 vb.net 2013 读取 sp的主要内容,如果未能解决你的问题,请参考以下文章
如何从 C# 读取 VB.NET 项目中的“app.config”文件
从 Visual Studio 2010 (VB.NET) 读取访问查询