2015-08-11 2 views
1

Я бегу хранимых процедур по имени в .net, и возвращает данные как JSON в моем веб-интерфейсеC# SQL хранится процедура, установленная Resultset в

Если моя хранимая процедура

SELECT name from employees 

Я вернусь таблица с TABLENAME = "Table1"

Так что мой JSON является {Table1: [{row1stuff}, {row2stuff}]}

Я хотел бы определить tablenames в моих процедур.

Прямо сейчас я делаю

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 странно, как у меня есть выбор сверху .. только не супер очевидно, когда вы просто глядя на зр

+2

Информация о именах запрашиваемых таблиц не возвращается из хранимой процедуры, что бы она вернула для выбора из * n * связанных таблиц? «Таблица1» является артефактом класса .net 'DataTable'. Выходной параметр был бы альтернативой 'SELECT'. –

+0

@AlexK. Я не хотел, чтобы он определял имена таблиц из таблиц, которые я запрашивал, это было бы что-то, что я должен был бы ввести (так что объединения не имели бы значения). «Таблица1 - это артефакт ...» - это то, чего я боялся :(Я использовал выходной параметр, но это было больший хлопот в SP, чем выполнение SELECT. Спасибо, хотя! - иногда приятно слышать, что он может Не делайте этого, чтобы вы перестали беспокоиться об этом. –

ответ

0

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

У LoadDataSet есть параметр для присвоения имен таблицам.

+0

Я хочу назвать таблицу в SQL, а не на C# - извините, если это было неясно –

+0

Тогда ваше «решение» примерно так же хорошо, как и вы. и ваш синтаксический анализ, чтобы заполнить другие имена данных. – granadaCoder

0

Некоторые обсуждения были переданы здесь. Set dbo.Table name as DataTable Name .. и да, вы могли сделать это только на C# через TableMapping или что-то такое умное, как вы. :)

Смежные вопросы