Bra*_*ann 37 .net sql sql-server dataset
我有以下存储过程
Create procedure psfoo ()
AS
select * from tbA
select * from tbB
Run Code Online (Sandbox Code Playgroud)
然后我以这种方式访问数据:
Sql Command mySqlCommand = new SqlCommand("psfoo" , DbConnection)
DataSet ds = new DataSet();
mySqlCommand.CommandType = CommandType.StoredProcedure;
SqlDataAdapter mySqlDataAdapter = new SqlDataAdapter();
mySqlDataAdapter.SelectCommand = mySqlCommand;
mySqlDataAdapter.Fill(ds);
Run Code Online (Sandbox Code Playgroud)
现在,当我想访问我的表时,我必须这样做:
DataTable datatableA = ds.Tables[0];
DataTable datatableB = ds.Tables[1];
Run Code Online (Sandbox Code Playgroud)
数据集Tables属性也通过字符串(而不是int)获得了一个访问器.
是否有可能在SQL代码中指定表的名称,以便我可以写这个:
DataTable datatableA = ds.Tables["NametbA"];
DataTable datatableB = ds.Tables["NametbB"];
Run Code Online (Sandbox Code Playgroud)
我正在使用SQL Server 2008,如果这有所不同.
Dav*_*ier 32
据我所知,从存储过程中,你不能这样做.但是,您可以在检索DataSet后设置名称,然后再使用它们.
ds.Tables[0].TableName = "NametbA";
Run Code Online (Sandbox Code Playgroud)
存储过程:
select 'tbA','tbB','tbC'
select * from tbA
select * from tbB
select * from tbC
Run Code Online (Sandbox Code Playgroud)
前端:
int i = 1;
foreach (string tablename in dsEmailData.Tables[0].Rows[0][0].ToString().Split(','))
{
dsEmailData.Tables[i++].TableName = tablename;
}
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助
有没有理由在填写DataSet后无法手动命名它们?
mySqlDataAdapter.Fill(ds);
ds.Tables[0].TableName = "NametbA";
ds.Tables[1].TableName = "NametbB";
Run Code Online (Sandbox Code Playgroud)
我不知道如何命名从存储过程中作为多个结果集的一部分返回的DataTables,但如果您知道存储过程返回的内容,那么手动命名它们应该可以正常工作.
编辑
知道您可以控制存储过程,一种替代方法可能是在表示表名的结果集中添加一列.然后你可以做类似的事情:
foreach (DataTable table in ds.Tables)
{
table.TableName = table.Rows[0]["TableName"].ToString();
}
Run Code Online (Sandbox Code Playgroud)
但是,这依赖于实际包含行的存储过程返回的结果集.如果它们不包含行,那么您必须将它包装在"if"语句中,并不是每个表都会得到一个名称.
归档时间: |
|
查看次数: |
87081 次 |
最近记录: |