私は作成したPOSのようなプログラムを実行する3台のPCセットアップを持っています。 1サーバとして機能するPCと2クライアントとして機能します。クライアント側では、実行時にプログラムが終了するという重い問い合わせがあります。強制終了する前に問題をどのようにキャッチしますか?Windowsフォームプログラムは、クエリ実行時に突然終了します。停止/クラッシュする前にエラーをどのようにキャッチしますか?
クエリは、入力されたすべての株の合計を取得し、売却された商品、別の支店に移管された商品、および破損した商品から差し引いて残りの株をチェックします。したがって、製品を検索するたびに、在庫を得るために4つのテーブル(在庫、販売、移転、損傷)を通過し、製品の説明(製品、カテゴリ、サブカテゴリ、サプライヤ)を取得するための4つのテーブルが追加されます。
戻って、アプリケーションを閉じる前にエラーをログに記録するにはどうすればよいですか?フォーム閉鎖イベントを取得することを考えていますが、クラッシュした場合にのみどのようにログに記録しますか?
EDIT 1:私はいつも、私のすべてのメソッドにメッセージボックスでキャッチしようとします。アプリケーションは、閉じる前にメッセージをポップアップしません。
SELECT p.Id,p.Product_Name Product,p.Description,
c.Category_Name Category,sc.Subcategory_Name Subcategory,s.Supplier_Name Supplier,p.Selling_Price `Unit Price`,
i.Stocks,s.Sales,i.Stocks - IFNULL(s.Sales, 0) - IFNULL(t.Transfer, 0) - IFNULL(d.Damage, 0) AS Remaining
FROM (SELECT Id, Product_Name, Description, Selling_Price, Category_Id, Subcategory_Id, Supplier_Id FROM product WHERE enable_flag = 1) p
LEFT OUTER JOIN(SELECT product_id, COALESCE(SUM(quantity), 0) AS Stocks FROM inventory WHERE enable_flag = 1 GROUP BY product_id) i
ON p.Id = i.product_id
LEFT OUTER JOIN(SELECT product_id, COALESCE(SUM(quantity), 0) AS Sales FROM sales_detail WHERE enable_flag = 1 GROUP BY product_id) s
USING(product_id)
LEFT OUTER JOIN(SELECT product_id, COALESCE(SUM(transfer_quantity), 0) AS Transfer FROM stock_transfer WHERE enable_flag = 1 GROUP BY product_id) t
USING(product_id)
LEFT OUTER JOIN(SELECT product_id, COALESCE(SUM(damaged_quantity), 0) AS Damage FROM damaged_product WHERE enable_flag = 1 GROUP BY product_id) d
USING(product_id)
JOIN Category c ON p.Category_Id=c.Id
JOIN Subcategory sc ON p.Subcategory_Id=sc.Id
JOIN Supplier s ON p.Supplier_Id=s.Id;
EDIT 2:
private void btnSearch_Click(object sender, EventArgs e)
{
dgvSearchItems.DataSource = dbConnect.DatabaseToDatagrid(Variables.dgvSearchItemsDataSource + " WHERE p.Product_Name LIKE '" + cmbSrchProd.Text + "%'");
if (dgvSearchItems.Rows.Count != 0)
{
this.dgvSearchItems.Columns[1].Frozen = true;
this.dgvSearchItems.Columns[2].Frozen = true;
this.dgvSearchItems.Columns[0].Visible = false;
this.dgvSearchItems.Columns[7].Visible = false;
this.dgvSearchItems.Columns[8].Visible = false;
}
txtQuantity.Focus();
}
私は私のデータベースへの接続に使用する方法:
private bool OpenConnection()
{
try
{
connection.Open();
return true;
}
catch (MySqlException ex)
{
switch (ex.Number)
{
case 0:
myNotification = new frmNotifOk();
myNotification.Show("Cannot connect to server.");
break;
case 1045:
myNotification = new frmNotifOk();
myNotification.Show("Invalid username/password, please try again.");
break;
}
return false;
}
}
ここに私のボタンのコードは、(Variables.dgvSearchItemsDataSource
が掲載クエリに相当します)です
heckが、なぜそれが負のポイントを得たのは何?私は合法的な質問をしているとそれに十分な詳細を与えても、私はいくつかの意見を得ることができるので、提案をした –
ありがとう男!私は自分の投稿を編集して、自分のすべての方法に 'Try Catch'を入れていることを明確にしました。しかし、閉じてもキャッチしません。 –