我知道你已经编辑过说会话不重要,但是我可以使用sessionparameter来完成这个工作。我有一种感觉,它也可以与ControlParameter一起工作。
所以您有一个用户定义的表类型:
创建类型tvptype as table(
COL1 INT,
COL2 INT)
去
< /代码>
以及使用它的存储过程:
create proc tvp proc(@tvp as tvptype readonly)as
从@tvp选择*
< /代码>
然后,一个网格视图绑定到一个从存储过程中选择的sqldatasource,并传递一个sessionparameter:。
<asp:gridview id=“gridview1”runat=“server”datasourceid=“sqldatasource1”/>gt;
<asp:sqldatasource id=“sqlddatasource1”selectcommand=“tvpproc”runat=“server”selectcommandtype=“storedprocedure”connectionstring=“server=(local)\sqlexpress;database=graph;integrated security=true”>
<选择参数>
<asp:sessionparameter sessionfield=“mydataTable”name=“tvp”/>
</selectparameters>
</asp:sqldatasource>
< /代码>
最后还有一点要把数据表放到会话中,尽管你说你已经有了它:
(VB)
<script runat=“server”>
受保护的子页加载(byval sender作为对象,byval e作为system.eventargs)
将mydataTable变暗为新的system.data.dataTable
myDataTable.Columns.AddRange({
new system.data.datacolumn(“col1”,gettype(integer)),
new system.data.datacolumn(“col2”,gettype(integer)))
mydataTable.rows.add(22,33)行
mydataTable.rows.add(44、55)
mydataTable.rows.add(66,77)行
会话(“MyDataTable”)=MyDataTable
结束子
& /脚本& GT;
< /代码>
(C<)
<script runat=“server”>
受保护的空页加载(对象发送程序,事件参数e)
{
system.data.dataTable mydataTable=新建system.data.dataTable();
myDataTable.Columns.AddRange(
新建System.Data.DataColumn[]。{
new system.data.datacolumn(“col1”,typeof(int)),
new system.data.datacolumn(“col2”,typeof(int)));
mydataTable.rows.add(22,33)行;
mydataTable.rows.add(44、55);
mydataTable.rows.add(66,77)行;
会话[“MyDataTable”]=MyDataTable;
}
& /脚本& GT;
< /代码>
从而形成一个精细的网格视图:

以及以下从探查器生成的查询:
declare@p1 dbo.tvptype
插入@p1值(22,33)
插入@p1值(44,55)
插入@p1值(66,77)
exec tvpproc@tvp=@p1
< /代码>
这是.NET 4,MSSQL Express 2010,但也应该工作得更低。
但是,我可以使用sessionparameter来完成这个工作。我觉得它也可以和一个控制参数一起工作。
所以您有一个用户定义的表类型:
CREATE TYPE TVPType AS TABLE(
Col1 int,
Col2 int)
GO
以及使用它的存储过程:
CREATE PROC TVPProc(@TVP AS TVPType READONLY) AS
SELECT * FROM @TVP
然后,绑定到从存储过程中选择的sqldatasource的GridView传递sessionParameter:
<asp:GridView ID="GridView1" runat="server" DataSourceID="SqlDataSource1" />
<asp:SqlDataSource ID="SqlDataSource1" SelectCommand="TVPProc" runat="server" SelectCommandType="StoredProcedure" ConnectionString="Server=(local)\sqlexpress;Database=Graph;Integrated Security=True">
<SelectParameters>
<asp:SessionParameter SessionField="MyDataTable" Name="TVP" />
</SelectParameters>
</asp:SqlDataSource>
最后还有一点要把数据表放到会话中,尽管你说你已经有了它:
(VB)
<script runat="server">
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
Dim MyDataTable As New System.Data.DataTable
MyDataTable.Columns.AddRange({
New System.Data.DataColumn("Col1", GetType(integer)),
New System.Data.DataColumn("Col2", GetType(integer))})
MyDataTable.Rows.Add(22, 33)
MyDataTable.Rows.Add(44, 55)
MyDataTable.Rows.Add(66, 77)
Session("MyDataTable") = MyDataTable
End Sub
</script>
(C)
<script runat="server">
protected void Page_Load(object sender, EventArgs e)
{
System.Data.DataTable MyDataTable = new System.Data.DataTable();
MyDataTable.Columns.AddRange(
new System.Data.DataColumn[] {
new System.Data.DataColumn("Col1", typeof (int)),
new System.Data.DataColumn("Col2", typeof (int))});
MyDataTable.Rows.Add(22, 33);
MyDataTable.Rows.Add(44, 55);
MyDataTable.Rows.Add(66, 77);
Session["MyDataTable"] = MyDataTable;
}
</script>
从而形成一个精细的网格视图:

以及以下从探查器生成的查询:
declare @p1 dbo.TVPType
insert into @p1 values(22,33)
insert into @p1 values(44,55)
insert into @p1 values(66,77)
exec TVPProc @TVP=@p1
这是.NET 4,MSSQL Express 2010,但也应该工作得更低。