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
aDataTable
,但是您应该从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,当我使用预览数据时,我可以看到表。但是当我使用代码时,我什么都看不到。我不知道怎么看。谢谢你的帮助。