Программа возвращает System.Data.DataSet .Я хочу вернуть элементы набора данных.
У меня есть база данных с 4 таблицами: Bands
, Festivals
, Stages
;и таблица соединений - Band_Festival
.
SQL запрашивает всю работу при выполнении, а DataGridView
в форме отображает правильные записи.
Я пытаюсь, чтобы WCF получилданные и вернуть DataSet
или list<DataSet>
в форму.
Выбранный элемент ComboBox
в форме должен передаваться в wcf при выполнении вызова, который используется в качестве параметра для запроса SQL.
String Festivals {get; set;}
ComboBox.SelectedItem = Festivals
используется для передачи параметра в запрос sql.
Когда условие WHERE запроса sql равно festival_name = 'Boomtown Fair'
, вызов возвращает "System.Data.DataSet" , я хочусписок предметов.Если условие festival_name = @festival
с Parameters.AddValue("@festival", Festivals)
Исключение выдается с «Параметр не указан»
Вот код:
Форма
String Festivals { get; set; }
FestivalsBandsServiceReference.FestivalBandsServiceClient ws = null;
public Form1()
{
InitializeComponent();
ComBoxFestivals.SelectedItem = Festivals;
}
private void Form1_Load(object sender, EventArgs e)
{
ws = new FestivalsBandsServiceReference.FestivalBandsServiceClient();
}
private void comBoxFestivals_SelectedIndexChanged(object sender, EventArgs e)
{
List<String> festival = ws.GenerateNewBandList(Festivals);
Console.WriteLine(String.Join("," ,festival));
}
FestivalBandsService.svc.cs
public List<DataSet> GenerateNewBandList(String Festivals)
{
List<DataSet> bands = new List<DataSet>();
string dataSource = @"Data Source = (LocalDB)\MSSQLLocalDB; AttachDbFilename = " +
@"D:\WCFFestivalBands\WCFFestivalBands\App_Data\FestivalBands.mdf; Integrated Security = True; Connect Timeout = 30";
//Create new instance of sql connection, pass in the connection string for FestivalBands.mdf to connect to database.
SqlConnection conn = new SqlConnection(dataSource);
string sqlQuerySelectBands = "SELECT Bands.Band_Name FROM Band_Festival JOIN dbo.Bands ON Bands.Band_ID =" +
"Band_Festival.Band_ID JOIN dbo.Festival ON Festival.Festival_ID " +
"= Band_Festival.Festival_ID WHERE Festival_Name = @festival";
SqlCommand cmd = new SqlCommand(sqlQuerySelectBands, conn);
cmd.Parameters.AddWithValue("@festival", Festivals);
conn.Open();
//Create new instance of DataAdpater to retrieve the data pass in Sql command
SqlDataAdapter da = new SqlDataAdapter(cmd);
//Create new instance of dataSet to hold the data retrieved from sql query
DataSet ds = new DataSet();
//using DataAdapter fill in dataSet wiht data if user input and stored data matches
da.Fill(ds);
bands.Add(ds);
return bands;
}
}
IFestivalBandsService.cs
[ServiceContract]
public interface IFestivalBandsService
{
[OperationContract]
List<DataSet> GenerateNewBandList(String Festivals);
}
Это довольноновый.Только что узнал, как передавать и возвращать значения с помощью WCF.Передача списка из набора данных является следующим уровнем.Любая помощь очень ценится.
Я не добавил в таблицы столбцы или строки, не уверен, что это подходит?
Заранее спасибо.