首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

一个关于DataTable返回值的有关问题

2011-12-20 
一个关于DataTable返回值的问题请问下边代码有错误么?publicDataTableGetTab(stringtabid){stringConnStri

一个关于DataTable返回值的问题
请问下边代码有错误么?
public   DataTable   GetTab(string   tabid)
{  
string   ConnString   =   System.Configuration.ConfigurationSettings.AppSettings[ "ConnectiongSqlServer "];


SqlConnection   myConn=new   SqlConnection(ConnString);
SqlCommand   topcmd=new   SqlCommand();
topcmd.Connection=   myConn;
topcmd.Parameters.Add(new   SqlParameter( "@tabid ",SqlDbType.VarChar,20));
topcmd.Parameters[ "@tabid "].Value=tabid;
topcmd.CommandText= "GetsysTab ";
                         
topcmd.CommandType   =   CommandType.StoredProcedure;//new

    DataTable   dstable   =   new   DataTable();
                               

SqlDataAdapter   adapter   =   new   SqlDataAdapter(topcmd);


adapter.Fill(dstable);
return   dstable;
}
为什么错误提示:类型   System.ComponentModel.ISite   的成员   System.ComponentModel.MarshalByValueComponent.Site   是接口,因此无法将其序列化。  



[解决办法]
SqlCommand topcmd=new SqlCommand();
topcmd.Connection= myConn;
topcmd.Parameters.Add(new SqlParameter( "@tabid ",SqlDbType.VarChar,20));
topcmd.Parameters[ "@tabid "].Value=tabid;
topcmd.CommandText= "GetsysTab ";

topcmd.CommandType = CommandType.StoredProcedure;//new

这块应该有问题.
改一下写的顺序.
SqlCommand topcmd=new SqlCommand();
topcmd.Connection= myConn;
topcmd.CommandText= "GetsysTab ";
topcmd.Parameters.Add(new SqlParameter( "@tabid ",SqlDbType.VarChar,20));
topcmd.Parameters[ "@tabid "].Value=tabid;

[解决办法]
要返回一个数据集,要定义一个游标类型的输出参数...具体给你看一个Oracle的例子吧..

1:建立包
CREATE OR REPLACE package SCOTT.pk_test
as
type mytype is ref cursor;
procedure p_get(mycs out mytype);
end;
/
2:建立包体:
CREATE OR REPLACE package BODY SCOTT.pk_test
as
procedure p_get(mycs out mytype)
as
begin
open mycs for select * from test;
end p_get;
end pk_test;
/
3:C#掉用存储过程:
OracleConnection orcn =new OracleConnection(System.Configuration.ConfigurationSettings.AppSettings[ "scott "]);
OracleCommand cmd=new OracleCommand( "pk_test.p_get ",orcn);
cmd.CommandType=CommandType.StoredProcedure;
OracleParameter p=new OracleParameter( "mycs ",OracleType.Cursor);
p.Direction=ParameterDirection.Output;
cmd.Parameters.Add(p);
OracleDataAdapter da=new OracleDataAdapter(cmd);
DataSet ds=new DataSet();
da.Fill(ds, "test ");
this.DataGrid1.DataSource=ds.Tables[ "test "].DefaultView;
Page.DataBind();


或者看看这里:
http://dev.csdn.net/develop/article/59/59109.shtm
[解决办法]
返回dataset就好.public DataTable GetTab(string tabid)==> public DataSet GetTab(string tabid)fill时用dataset
[解决办法]


参见MSDN:
ms-help://MS.MSDNQTR.v80.chs/MS.MSDN.v80/MS.NETDEVFX.v20.chs/cpref4/html/M_System_Data_Common_DbDataAdapter_Fill_1_9a032d43.htm


当指定的查询返回多项结果时,每个返回查询的行的结果集都放置在单独的表中。将整数值追加到指定的表名从而对其他结果集进行命名(例如“Table”、“Table1”、“Table2”等)。如果某个查询不返回行,则不会为该查询创建表,因此,如果您先处理一个插入查询,然后再处理一个选择查询,这样由于为选择查询创建的表是第一个表,所以该表将被命名为“Table”。

热点排行