Я присоединяюсь к 4 таблицам в одном выражении SQL, которое считывает данные в объекты и заполняет gridview.C#: Inner Join 4 tables SQL Server
Мой вопрос: Это хорошая практика? имеет ли он какие-либо побочные эффекты, такие как производительность при чтении из базы данных? если да, пожалуйста, предоставьте мне несколько советов по его улучшению.
protected void OrdersGridView_SelectedIndexChanged(object sender, EventArgs e)
{
string OID = OrdersGridView.SelectedRow.Cells[0].Text;
OrderIDlbl.Text = "Order# " + OID;
using (SqlConnection con = new SqlConnection(cData.CS))
{
con.Open();
{
string sql = "select o.*, c.*, oi.*, p.* from Orders as o INNER JOIN Customers as c ON o.CustID = c.CustomerID INNER JOIN OrderItems as oi ON o.OrderID = oi.InvoiceID INNER JOIN Products as p ON p.PartNumber = oi.PartNumb where OrderID ='" + OID + "'";
SqlCommand myCommand = new SqlCommand(sql, con);
myCommand.CommandTimeout = 15;
myCommand.CommandType = CommandType.Text;
using (SqlDataReader myReader = myCommand.ExecuteReader())
{
while (myReader.Read())
{
passid.Text = (myReader["CustID"].ToString());
TermsDropdown.Value = (myReader["PaymentTerms"].ToString());
PaymentDate.Value = ((DateTime)myReader["PaymentDate"]).ToString("MMMM dd, yyyy");
OrderDate.Value = ((DateTime)myReader["OrderDate"]).ToString("MMMM dd, yyyy");
SalesRep.Value = (myReader["SalesRep"].ToString());
comenttxtbox.Value = (myReader["Comments"].ToString());
Discountlbl.Text = "Discount: " + (myReader["Discount"].ToString() + " AED");
Totallbl.Text = "Total: " + (myReader["Total"].ToString() + " AED");
Statuslbl.Text = (myReader["OrderStatus"].ToString());
SelectCustomertxtbox.Value = (myReader["Company"].ToString());
Name.Text = "Name: " + (myReader["FName"].ToString()) + " " + (myReader["LName"].ToString());
Phone.Text = "Phone: " + (myReader["Phone"].ToString());
Mail.Text = "Mail: " + (myReader["Personal_Email"].ToString());
}
}
DataTable dt = new DataTable();
using (SqlDataAdapter da = new SqlDataAdapter(myCommand))
{
da.Fill(dt);
OrderItemsGridview.DataSource = dt;
OrderItemsGridview.EmptyDataText = "No Items";
OrderItemsGridview.DataBind();
}
}
}
}
быстрый ответ. Нет .. вы тянете много ненужных данных, делая это. Единственными повторяющимися данными являются элементы. Таким образом, у вас есть несколько запросов, которые возвращают только одну запись. – gbianchi
Взаимоотношения сами по себе не являются плохими, если у вас есть соответствующие индексы. Звездный столбец не является хорошей практикой, поскольку, поскольку они возвратят больше данных, чем вам нужно, и могут привести к другим проблемам с течением времени, когда изменения будут внесены в схему db. – wdosanjos
[SQL Injection alert] (http://msdn.microsoft.com/en-us/library/ms161953%28v=sql.105%29.aspx) - вы должны ** не ** объединять свои SQL-запросы - использовать ** параметризованные запросы ** вместо этого, чтобы избежать SQL-инъекции –