所以我们有一个存储过程,返回三个结果:
SELECT * FROM Table1 WHERE Name = "bob" AS Bob
SELECT * FROM Table2 WHERE Name = "steve" AS Steve
SELECT * FROM Table3 WHERE Name = "jim" AS Jim
在C#中,我从通话中得到一个数据集:
using (SqlConnection conn = new SqlConnection("server=MySqlServer;integrated security=sspi;"))
{
conn.Open();
SqlCommand cmd = conn.CreateCommand();
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "sp_spaceused";
cmd.CommandTimeout = 60;
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
da.Fill(ds);
我知道我可以使用索引获取单个结果:
var bob = ds[0];
var steve = ds[1];
var jim = ds[2];
别名是否传递给C#? 是否可以通过别名访问值?
答案 0 :(得分:1)
别名是否传递给C#?
不,它没有。
是否可以通过别名访问值?
没有。
您只能在填充DataSet
后指定别名/ TableName。基本上,您最终会丢失在proc中的SQL Query中分配的别名。
答案 1 :(得分:1)
@jtimperley有一个好主意,但如果你这样做,你可以对列名称采取行动,无论是否返回行。
SELECT'' AS TableName1,* 从表1 姓名=" bob" AS Bob
SELECT'' AS TableName2,* 从表2 姓名="史蒂夫"作为史蒂夫
SELECT'' AS TableName3,* 从表3 姓名="吉姆"作为吉姆
答案 2 :(得分:0)
没有最干净的解决方案,但你可以做这样的事情。然后在已知列中查询您收到的表格类型。
SELECT 'Table1' AS TableName, * FROM Table1 WHERE Name = "bob" AS Bob
SELECT 'Table2' AS TableName, * FROM Table2 WHERE Name = "steve" AS Steve
SELECT 'Table3' AS TableName, * FROM Table3 WHERE Name = "jim" AS Jim