Don';我不知道如何从vb.net 2013中读取sp

Don';我不知道如何从vb.net 2013中读取sp,vb.net,datagridview,sql-server-express,Vb.net,Datagridview,Sql Server Express,我有一个存储过程,它以表的形式返回变量列。我需要将此输出放入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 set

我有一个存储过程,它以表的形式返回变量列。我需要将此输出放入
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()

问题是您应该传递
DataGridView1.DataSource
a
DataTable
,但是您应该从
cmd.ExecuteReader()传递
SqlDataReader
。查看的文档以了解它接受什么


总之,您需要做的是在
adapter之后将
DataSource
设置为
table
之后。已调用Fill(table)

我通过以下方式解决了问题: 昏昏沉沉 参数

     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

我不能做填充法,也不知道怎么做。生成时的tableadapter不创建此方法,也不允许我创建此方法。对不起,我说的是英语。你已经叫它:'填充datatable Try adapter.Fill(table)reader=cmd.ExecuteReader()Catch ex As System.Exception MessageBox.Show(ex.GetBaseException.Message)End Try我使用助手创建数据源并选择sp,当我使用预览数据时,我可以看到表。但是当我使用代码时,我什么都看不到。我不知道怎么看。谢谢你的帮助。