Stack Overflow на русском Asked by user396842 on August 29, 2021
Объясните, пожалуйста,
DataSet ds = new DataSet();
...
ds.Tables.AddRange(new DataTable[] { customers, orders });
Cтроки 27 и 54. Непонятно какую работу здесь выполняет объект ds.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.SqlClient;
//
namespace CBS.ADO_NET.TableConstraints
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
string connectionString = @"Data Source=.SQLEXPRESS; Initial Catalog=ShopDB; Integrated Security=True;"; // создание строки подключения
DataSet ds = new DataSet();
DataTable customers = new DataTable("Customers");
DataTable orders = new DataTable("Orders");
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
SqlCommand customersCmd = new SqlCommand("SELECT CustomerNo, LName, FName, Address1, Phone FROM Customers", connection);
SqlCommand ordersCmd = new SqlCommand("SELECT OrderID, CustomerNo, OrderDate FROM Orders", connection);
SqlDataReader ordersReader = ordersCmd.ExecuteReader(); // получение DataReader для таблицы OrderDetails
// метод LoadWithSchema позволяет на основе объекта DataReader создать объект DataTable
//с ограничениями для столбцов как в базе данных и заполнить эту таблицу данными
orders.LoadWithSchema(ordersReader);
ordersReader.Close();
SqlDataReader customersReader = customersCmd.ExecuteReader();
customers.LoadWithSchema(customersReader);
customersReader.Close();
}
// объект DataReader не имеет информации об ограничениях объектов DataTable, таких как
// UniqueConstraint, ForeignKeyConstraint и PrimaryKey, поэтому прийдется их создать вручную
customers.PrimaryKey = new DataColumn[] { customers.Columns[0] };
ds.Tables.AddRange(new DataTable[] { customers, orders });
// создание ограничения ForeignKeyConstraint для таблицы OrderDetails
var FK_CustomersOrders = new ForeignKeyConstraint(customers.Columns["CustomerNo"], orders.Columns["CustomerNo"]);
orders.Constraints.Add(FK_CustomersOrders);
parentGridView.DataSource = customers; // связывание элемента управления parentGridView с таблицей Products
childDataGridView.DataSource = orders; // Связывание элемента управления childDataGridView c таблицей OrderDetails
}
}
}
Внешний ключ (ForeignKeyConstraint
) можно создать только между таблицами (DataTable
), которые включены в один набор данных (DataSet
).
Если закомментировать строку 54, то на строке 57 должно быть выброшено исключение. Об этом написано в документации конструктора ForeignKeyConstraint
:
InvalidConstraintException:
The columns have different data types.
-Or -
The tables don't belong to the same DataSet.
Answered by default locale on August 29, 2021
Get help from others!
Recent Questions
Recent Answers
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP