C# 如何使用存储过程pivot中的参数填充gridview
我是新来的,有人能帮我解决这个问题吗?我一直在尝试,但无法通过。我试图使用一个存储过程来填充gridview,该存储过程使用pivot参数,在我的where子句中,当我直接赋值时,它工作正常,但当我使用参数以便用户可以选择时,它会抛出一个错误。提前谢谢 我的程序:C# 如何使用存储过程pivot中的参数填充gridview,c#,asp.net,sql-server,gridview,pivot,C#,Asp.net,Sql Server,Gridview,Pivot,我是新来的,有人能帮我解决这个问题吗?我一直在尝试,但无法通过。我试图使用一个存储过程来填充gridview,该存储过程使用pivot参数,在我的where子句中,当我直接赋值时,它工作正常,但当我使用参数以便用户可以选择时,它会抛出一个错误。提前谢谢 我的程序: SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER PROCEDURE [dbo].[GetMarksheetByExamId] (@SubjectId INT) A
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[GetMarksheetByExamId]
(@SubjectId INT)
AS
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX)
SELECT @cols = STUFF((SELECT ',' + QUOTENAME(Subjects)
FROM SMarksheet
GROUP BY Subjects
-- ORDER BY Id
FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 1, '')
SET @query = 'SELECT SubjectId, StudentName ' + @cols + ' FROM
(SELECT SubjectId, StudentName, Subjects, TotalM
FROM SMarksheet
WHERE SubjectId = @SubjectId) x
PIVOT
(MAX(TotalM)
FOR Subjects IN (' + @cols +')) p '
EXEC sp_executesql @query;
我的网格视图:
<table border="1" width="60%" align="center">
<tr>
<td align="center">
<asp:TextBox ID="txt_Id" runat="server" AutoPostBack="true">1</asp:TextBox>
<br />
<asp:Button ID="Button1" runat="server" Text="Submit" OnClick="Button1_Click" />
</td>
</tr>
<tr>
<td>
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="true">
</asp:GridView>
</td>
</tr>
</table>
看起来变量赋值在动态查询中。您需要更改@Query分配,如下所示:
set @query = 'SELECT SubjectId, StudentName ' + @cols + ' from
(
select SubjectId, StudentName, Subjects, TotalM
from SMarksheet
where SubjectId=@SubId
) x
pivot
(
max(TotalM)
for Subjects in (' + @cols +')
) p '
exec sp_executesql @query, @SubId = @SubjectId;
可以如上所述将subject作为int参数传递看起来变量赋值在动态查询中。您需要更改@Query分配,如下所示:
set @query = 'SELECT SubjectId, StudentName ' + @cols + ' from
(
select SubjectId, StudentName, Subjects, TotalM
from SMarksheet
where SubjectId=@SubId
) x
pivot
(
max(TotalM)
for Subjects in (' + @cols +')
) p '
exec sp_executesql @query, @SubId = @SubjectId;
您可以如上所述将subject作为int参数传递嘿,谢谢,我试过了,但抛出了一个错误。转换nvarchar valueUpdated查询时转换失败,因为SubjectId为int,您可能需要在sp_executesql中将其作为参数传递,或者您需要在连接期间强制转换为VARCHAR,或者您可能需要CONCAT,我认为2008年不存在CONCAT。。。不确定Though仍在抛出错误System.Data.SqlClient.SqlException:过程需要类型为“ntext/nchar/nvarchar”的参数“@parameters”。我在这里修复了它,感谢您的努力:从SMarksheet,其中SubjectId='''+CAST(@SubjectId AS varchar(31))+''嘿,谢谢,我尝试了,但抛出了一个错误。转换nvarchar valueUpdated查询时转换失败,因为SubjectId为int,您可能需要在sp_executesql中将其作为参数传递,或者您需要在连接期间强制转换为VARCHAR,或者您可能需要CONCAT,我认为2008年不存在CONCAT。。。不确定Though仍在抛出错误System.Data.SqlClient.SqlException:过程需要类型为“ntext/nchar/nvarchar”的参数“@parameters”。我在这里修复了它,感谢您的努力:从SMarksheet开始,其中SubjectId=''+CAST(@SubjectId AS varchar(31))+''