我的代码未按预期工作,我将问题提至最后几天,但仅在两天后进行了检查,我想我的机会已经消失了。如果那是错的话,我被要求第二次问好。
在我的Visual Studio Pro上,我对代码进行了一些奇怪的设置。没有断开循环的错误消息。似乎我放弃检查销售点项目的所有文件中的错误。
我已经给了updateb()和invoice()。因此,最好像我特定文件中的所有代码一样。像这样。
using MySql.Data.MySqlClient;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Linq.Expressions;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace superpos3
{
public partial class salesn : Form
{
public salesn()
{
InitializeComponent();
}
public static int totalPrice = 0;
public static int payment = 0;
public static int balance = 0;
MySqlConnection con = new MySqlConnection("server= localhost; database =superpos; username= root; password=; ");
public void invoice()
{
con.Open();
string query = "select max(id) from salesmain ";
MySqlCommand cmd2 = new MySqlCommand(query, con);
MySqlDataReader dr;
dr = cmd2.ExecuteReader();
if (dr.Read())
{
string val = dr[0].ToString();
if (val == "")
{
lbinvoice.Text = "1";
}
else
{
int a;
a = int.Parse(dr[0].ToString());
a = a + 1;
lbinvoice.Text = a.ToString();
}
con.Close();
}
}
private void richTextBox1_TextChanged(object sender, EventArgs e)
{
}
private void txtno_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == 13)
{
txtqty.Enabled = true;
txtqty.Focus();
}
}
private void txtqty_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == 13)
{
try
{
string txt = "select * from products where id='" + txtno.Text + "'";
MySqlCommand cmd = new MySqlCommand(txt, con);
con.Open();
MySqlDataReader r = cmd.ExecuteReader();
while (r.Read())
{
int price = int.Parse(txtqty.Text.ToString()) * int.Parse(r[4].ToString());
totalPrice = totalPrice + price;
//discount
// totalPrice = totalPrice - totalPrice* Payment.discount/100;
dataGridView1.Rows.Add(dataGridView1.RowCount, r[0], r[1], txtqty.Text.Trim(), r[4], price);
}
lbitems.Text = " " + (dataGridView1.RowCount - 1) + "";
lbtotal.Text = " " + totalPrice + " ";
con.Close();
}
catch (Exception ee)
{
MessageBox.Show(ee.Message, "Error From Database");
}
txtno.Focus();
txtno.Clear();
txtqty.Enabled = false;
txtqty.Clear();
}
}
private void txtqty_TextChanged(object sender, EventArgs e)
{
}
private string name;
public string Staffname
{
get { return name; }
set { name = value; }
}
public void updatedb()
{
for (int row = 0; row < dataGridView1.Rows.Count; row++)
{
string itmno = dataGridView1.Rows[row].Cells[1].Value.ToString();
string itmqty = dataGridView1.Rows[row].Cells[3].Value.ToString();
string t = "select * from products where id= '"+ itmno + "'";
string oldqty = "", newqty = "";
Connnew.DbSearch(t);
while (Connnew.dr.Read())
{
oldqty = Connnew.dr[5].ToString();
newqty = (int.Parse(oldqty) - int.Parse(itmqty)).ToString();
}
string t2 = "update products SET qty = '" + newqty + "' WHERE id = '" + itmno + "'";
//t2 = t2.Replace("{0}", itmno);
//t2 = t2.Replace("{2}", newqty);
Connnew.DbUpdate(t2);
}
}
private void salesn_Load(object sender, EventArgs e)
{
label6.Text = Staffname;
lbldate.Text = DateTime.Today.ToString("dd/MM/yyyy");
lbltime.Text = DateTime.Now.ToShortTimeString();
invoice();
}
private void button1_Click(object sender, EventArgs e)
{
try
{
for (int i = 0; i < dataGridView1.Rows.Count; i++)
{
MySqlCommand cmd = new MySqlCommand();
cmd.Connection = con;
cmd.CommandText = "Insert into salesproducts(saleid,productname,qty,grosstotal)values(@saleid,@productname,@qty,@grosstotal)";
cmd.Parameters.AddWithValue("@saleid", lbinvoice.Text);
cmd.Parameters.AddWithValue("@productname", dataGridView1.Rows[i].Cells[2].Value);
cmd.Parameters.AddWithValue("@qty", dataGridView1.Rows[i].Cells[3].Value);
cmd.Parameters.AddWithValue("@grosstotal", dataGridView1.Rows[i].Cells[4].Value);
MySqlCommand cmd1 = new MySqlCommand();
cmd1.Connection = con;
cmd1.CommandText = "insert into salesmain(id,date,time,cashername,qty,grosstotal)values(@id,@date,@time,@cashername,@qty,@grosstotal)";
cmd1.Parameters.AddWithValue("@id", lbinvoice.Text);
cmd1.Parameters.AddWithValue("@date", lbldate.Text);
cmd1.Parameters.AddWithValue("@time", lbltime.Text);
cmd1.Parameters.AddWithValue("@cashername", label6.Text);
cmd1.Parameters.AddWithValue("@qty", lbitems.Text);
cmd1.Parameters.AddWithValue("@grosstotal", lbtotal.Text);
con.Open();
int x = cmd.ExecuteNonQuery();
int y = cmd1.ExecuteNonQuery();
MessageBox.Show("Record added ..........");
updatedb();
//until here everything worked fine but if additionally given below codes not wroking
even the updatedb().
dataGridView1.Rows.Clear();
lbtotal.Text = "0";
lbitems.Text = "0";
txtno.Focus();
totalPrice = 0;
con.Close();
invoice();
}
}
catch (Exception ex)
{
//MessageBox.Show(ex.Message);
}
finally
{
con.Close();
}
}
private void button2_Click(object sender, EventArgs e)
{
pay p = new pay();
p.Show();
}
private void label6_Click(object sender, EventArgs e)
{
}
}
}
我看到一切都很好,但仍然找不到这些问题。
与以上相关的与Connnew.DbSearch(t)有关的“ Connnew”如下:
using MySql.Data.MySqlClient;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using MySql.Data.MySqlClient;
namespace superpos3
{
class Connnew
{
public static MySqlConnection con = new MySqlConnection("server= localhost; database =superpos; username= root; password=; ");
public static MySqlCommand poscmd = new MySqlCommand();
public static MySqlDataReader dr;
public static void DbSearch(string txt)
{
con.Close();
poscmd.Connection = con;
poscmd.CommandText = txt;
con.Open();
dr = poscmd.ExecuteReader();
}
public static void DbUpdate(string txt)
{
con.Close();
poscmd.Connection = con;
poscmd.CommandText = txt;
con.Open();
poscmd.ExecuteNonQuery();
}
}
}
我无法完全显示图片的屏幕截图,或者这里没有任何权限。请点击下面的链接。
please watch the sales window here
then please watch this one to know whats not work
请让我知道代码结构的问题是什么或真正出问题了......(这个问题已经结束并在下面更新了我的问题)< / p>
我检查了所有,但除了form1.cs文件与这里的问题无关。所以另外这里:
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;
namespace superpos3
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void timer1_Tick(object sender, EventArgs e)
{
progressBar1.Value = progressBar1.Value + 1;
if (progressBar1.Value >= 100)
{
Login In = new Login();
this.Hide();
In.Show();
timer1.Enabled = true;
progressBar1.Visible = false;
timer1.Enabled = false;
}
}
private void progressBar1_Click(object sender, EventArgs e)
{
}
}
}
答案 0 :(得分:0)
我刚刚删除了catch块,并在下面的行中看到了此错误。
`string itmno = `dataGridView1.Rows[row].Cells[1].Value.ToString();`
The error is:System.NullReferenceException
HResult=0x80004003
Message=Object reference not set to an instance of an object.
Source=superpos3
StackTrace:
at superpos3.salesn.updatedb() in D:\superpos3\superpos3\superpos3\salesn.cs:line 174
at superpos3.salesn.button1_Click(Object sender, EventArgs e) in D:\superpos3\superpos3\superpos3\salesn.cs:line 258
at System.Windows.Forms.Control.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.ButtonBase.WndProc(Message& m)
at System.Windows.Forms.Button.WndProc(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData)
at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
at System.Windows.Forms.Application.Run(Form mainForm)
at superpos3.Program.Main() in D:\superpos3\superpos3\superpos3\Program.cs:line 19
抱歉,我在这里错过了信息: Please watch the sales window here
答案 1 :(得分:0)
一般建议。请考虑在许多地方更改代码。并且不要将MySqlConnection包装到对象中,因为它已经是面向对象的。 您不应在每次迭代中添加参数并打开连接,例如:
private void button1_Click(object sender, EventArgs e)
{
try
{
for (int i = 0; i < dataGridView1.Rows.Count; i++)
{
MySqlCommand cmd = new MySqlCommand();
cmd.Connection = con;
cmd.CommandText = "Insert into salesproducts(saleid,productname,qty,grosstotal)values(@saleid,@productname,@qty,@grosstotal)";
cmd.Parameters.AddWithValue("@saleid", lbinvoice.Text);
cmd.Parameters.AddWithValue("@productname", dataGridView1.Rows[i].Cells[2].Value);
cmd.Parameters.AddWithValue("@qty", dataGridView1.Rows[i].Cells[3].Value);
cmd.Parameters.AddWithValue("@grosstotal", dataGridView1.Rows[i].Cells[4].Value);
MySqlCommand cmd1 = new MySqlCommand();
cmd1.Connection = con;
cmd1.CommandText = "insert into salesmain(id,date,time,cashername,qty,grosstotal)values(@id,@date,@time,@cashername,@qty,@grosstotal)";
cmd1.Parameters.AddWithValue("@id", lbinvoice.Text);
cmd1.Parameters.AddWithValue("@date", lbldate.Text);
cmd1.Parameters.AddWithValue("@time", lbltime.Text);
cmd1.Parameters.AddWithValue("@cashername", label6.Text);
cmd1.Parameters.AddWithValue("@qty", lbitems.Text);
cmd1.Parameters.AddWithValue("@grosstotal", lbtotal.Text);
con.Open();
相反,应该这样做:
private void button1_Click(object sender, EventArgs e)
{
try
{
MySqlCommand cmd = new MySqlCommand();
cmd.Connection = con;
con.Open();
cmd.CommandText = "Insert into salesproducts(saleid,productname,qty,grosstotal)values(@saleid,@productname,@qty,@grosstotal)";
MySqlCommand cmd1 = new MySqlCommand();
cmd1.Connection = con;
cmd1.CommandText = "insert into salesmain(id,date,time,cashername,qty,grosstotal)values(@id,@date,@time,@cashername,@qty,@grosstotal)";
cmd.Parameters.Add ("@saleid", SqlDbType.Int);
cmd.Parameters.Add ("@productname", SqlDbType.String);
cmd.Parameters.Add ("@qty", ...);
cmd.Parameters.Add ("@grosstotal", ...);
cmd1.Parameters.Add("@id", ...);
cmd1.Parameters.Add("@date", ...);
cmd1.Parameters.Add("@time", ...);
cmd1.Parameters.Add("@cashername", ...);
cmd1.Parameters.Add("@qty", ...);
for (int i = 0; i < dataGridView1.Rows.Count; i++)
{
cmd.Parameters["@saleid"] = lbinvoice.Text;
cmd.Parameters["@productname"] = dataGridView1.Rows[i].Cells[2].Value;
cmd.Parameters["@qty"] = dataGridView1.Rows[i].Cells[3].Value;
....
}
con.Close();
还考虑在程序开始时仅打开一次连接,并在程序结束时仅关闭一次。
答案 2 :(得分:0)
exception unhandled error message --> please click
在updateb()方法的for循环内部,窗口如上图所示。 我正在寻找如何在button1_Click void内部或外部进行updateb()方法的工作。因此,请提供代码示例给我最好的答案。或者,如果询问一些代码或不清楚信息,请告诉我。