不知道如何从 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,但您将SqlDataReadercmd.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的主要内容,如果未能解决你的问题,请参考以下文章

vb.net怎么从DataSet中读取一行的数据

如何从 C# 读取 VB.NET 项目中的“app.config”文件

从 Visual Studio 2010 (VB.NET) 读取访问查询

如何从 VB.NET 中的 USB 端口获取数据

vb.net如何与excel建立连接,并从里面查询并读取数据?

关于VB.NET的CSV文件的读取