Stack Overflow на русском Asked on November 5, 2021
Объясните, пожалуйста,
customers.PrimaryKey = new DataColumn[] { customers.Columns[0] };
В строке 54 немного странный синтаксис. Ключ накладывается на первый столбец массива? Но почему не записать как имятаблицы.имястолбца зачем обязательно как массив записывать? И причем здесь new?
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
}
}
}
В чём тут сранного я не пойму.
customers.PrimaryKey = new DataColumn[] { customers.Columns[0] };
Создание и инициализация массива типа DataColumn; почитайте тут
а то что customers.Columns[0]
так это их выбор.
Захотели первый зная что там ключ, если вы знаете что ключ в правом кармане будите ли вы искать его в левом?
Answered by Aziz Umarov on November 5, 2021
DataTable.PrimaryKey
принимает массив столбцов, а не столбец, потому как первичный ключ таблицы может состоять из нескольких столбцов.
Поэтому при присвоении свойству значения создается массив типа DataColumn
с единственным элементом. Его здесь объявили как можно более явно для наглядности, можно было и короче:
customers.PrimaryKey = { customers.Columns[0] };
В качестве столбца указан первый столбец таблицы customers
, т.е. столбец с индексом 0. Можно было бы и указать столбец по имени.
customers.PrimaryKey = { customers.Columns["CustomerNo"] };
Answered by default locale on November 5, 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