C#sql存储过程设置resultset的表名

时间:2015-08-11 14:43:24

标签: c# sql-server stored-procedures

我在.net中按名称运行存储过程,并将数据作为JSON返回到我的前端

如果我的存储过程是

SELECT name from employees

我找回tablename =“Table1”

的表格

所以我的JSON是{Table1:[{row1stuff},{row2stuff}]}

我想在我的程序中定义表名。

现在我正在做

SELECT 'names'
SELECT name from employees

在我的c#中,我遍历第一个表值并命名其他表

SqlDataAdapter da = new SqlDataAdapter(cmd);
da.Fill(dt); //dt is a dataset
//start at 1 since the first table is the tablenames table
for (int i = 1; i < dt.Tables.Count; i++)
  dt.Tables[i].TableName = dt.Tables[0].Rows[0].ItemArray[i-1].ToString();
//get rid of the first table
dt.Tables.RemoveAt(0);
return JObject.FromObject(dt);

现在正在使用,我的json是{姓名:[{row1},{row2} ...]}

如果我能做的话会很棒

SELECT name from employees as names

(但是这不会在sp返回的内容中设置表名,只是为sql设置它)

为了清楚起见,我的一些存储过程正在返回多个结果集,所以我这样做

SELECT 'Employees','Cars','Websites'
SELECT * FROM employees
SELECT * FROM cars
SELECT * from sites

所以我回到了json

{Employees:[{emp1},{emp2}...], Cars:[{car1}], Websites:[{site1}, {site2}]}

哪个是完美的,但是如果我在顶部选择那么让SP变得怪异......当你只是看着sp

时就不那么明显了

2 个答案:

答案 0 :(得分:1)

https://msdn.microsoft.com/en-us/library/Bb748727.aspx?f=255&MSPPError=-2147217396

LoadDataSet有一个用于命名表的参数。

(如果未来的网址为di3s,则会从上面的网址粘贴以下内容)

'Declaration
Public Overridable Sub LoadDataSet ( _
    storedProcedureName As String, _
    dataSetAs DataSet, _
    tableNames As String(), _
    ParamArray parameterValues As Object() _
)
tableNames
Type: array<System.String>

An array of table name mappings for the DataSet.

答案 1 :(得分:1)

这里提到了一些讨论.. Set dbo.Table name as DataTable Name ..是的,你只能通过TableMapping在C#中做到这一点,或者像你一样聪明。 :)