一个关于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”。