我使用模型优先方法创建了一个数据库。
我有三张桌子:
Books
属性BookID, Title.
Authors
属性AuthorID, Name, Surname.
AuthorBook
表,以便与属性AuthorBookID, AuthorID, BookID.
建立多对多连接。所有这些表都有一些数据。
我有一个文本框,我想输入一本书的标题或本书作者的姓名或姓氏,所选的(按存储过程)项目将显示在DataGrid中。
我已经创建了一个存储过程,它在SQL Management Studio和Visual Studio脚本中成功完成了此功能。但我不知道如何通过代码使其工作以及如何正确使用它。
的Xaml:
<Canvas>
<TextBox x:Name="SearchBox" Width="193" Height="32" Canvas.Left="38" Canvas.Top="38"></TextBox>
<Button Name="SearchButton" Click="SearchButton_OnClick" Content="Search" Canvas.Left="204" Canvas.Top="80" Height="30" Width="64"></Button>
<DataGrid x:Name="Info" ItemsSource="{Binding Path=Authorslist1}" Background="Honeydew" Canvas.Top="200" Canvas.Left="30" Width="259" Height="50" ></DataGrid>
</Canvas>
C#:
public partial class UserPage : Window
{
Model1Container db1 = new Model1Container();
private MainWindow mv = new MainWindow();
public UserPage(Model1Container d, MainWindow m)
{
InitializeComponent();
DataContext = this;
db1 = d;
mv = m;
}
private void SearchButton_OnClick(object sender, RoutedEventArgs e)
{
}
脚本:
CREATE PROCEDURE [dbo].AuthorProcedure1
@name nvarchar(50)
AS
SELECT
BookSet.Title, AuthorSet.Name, AuthorSet.Surname
FROM [dbo].AuthorBookSet
JOIN BookSet ON BookSet.BookID=AuthorBookSet.BookID
JOIN AuthorSet ON AuthorSet.AuthorID=AuthorBookSet.AuthorID
WHERE Title=@name
GO
答案 0 :(得分:1)
好的,总结了评论:
1)创建一个模型来保存结果(或使用匿名类型):
public class BookViewModel
{
public string Title { get; set; }
public string Name { get; set; }
public string Surname { get; set; }
}
2)设置参数并调用proc:
var bookTitle = new SqlParameter("@name", txtSearch.Text);
var result = context.Database.SqlQuery<BookViewModel>("AuthorProcedure1 @name", bookTitle).ToList();
答案 1 :(得分:0)
我可以这样写,只获得标题:
var bookTitle = new SqlParameter("@name", SearchBox.Text);
var result = db1.Database.SqlQuery<BookViewModel>("AuthorProcedure1 @name", bookTitle).ToList();
Info.ItemsSource = (from s in result group s by s.Title into res select new { MyTitle = res.Key }).ToList();
它通过绑定显示在datagrid中。以及如何获得作者?
将DataGrid的ItemsSource属性设置为List&lt; BookViewModel&gt;。此列表将包含从存储过程返回的作者:
var result = db1.Database.SqlQuery<BookViewModel>("AuthorProcedure1 @name", bookTitle).ToList();
Info.ItemsSource = result;
<DataGrid x:Name="Info" AutoGenerateColumns="False" Background="Honeydew" Canvas.Top="200" Canvas.Left="30"
Width="259" Height="50" >
<DataGrid.Columns>
<DataGridTextColumn Header="Title" Binding="{Binding Title}" />
<DataGridTextColumn Header="Name" Binding="{Binding Name}" />
<DataGridTextColumn Header="Surname" Binding="{Binding Surname}" />
</DataGrid.Columns>
</DataGrid>
答案 2 :(得分:0)
以下是解决方案:
var animals = ["max": "z", "Royal": nil] //store key pairs