我使用这些信息构建一个对象,然后在后台线程上运行以执行必须对数据库执行的操作。
同样的对象是以相同的方式构建的,所以它会看到数据库中是否存在所有rdy,如果没有,如果不插入新的则会更新它。
插入确实以100%工作,但是当我尝试更新时出现错误
Control.Invoke必须用于与在a上创建的控件进行交互 单独的线程。
at Microsoft.AGL.Common.MISC.HandleAr(PAL_ERROR ar)at at System.Windows.Forms.Control.get_Text()at System.Data.SqlClient.SqlCommand.ExecuteReader(的CommandBehavior cmdBehavior,RunBehavior runBehavior,Boolean returnStream)at System.Data.SqlClient.SqlCommand.ExecuteNonQuery()at DocumentForm.RunOnBackGroundDB()
这是代码:
我如何构建对象
this._IdentifierToCheck = this.textBoxIdentifier.Text;
this._CodBarToCheck = this.textBoxCodBar.Text;
this._prodToShow = new ProdToShow();
this._prodToShow.Ref = this.textBoxRef.Text;
this._prodToShow.Descr = this.textBoxDescr.Text;
this._prodToShow.PreviousQtd = float.Parse(this.textBoxPrevQtd.Text);
this._prodToShow.Qtd = float.Parse(this.textBoxNewQtd.Text);
this._prodToShow.Price = float.Parse(this.textBoxPrice.Text);
this._prodToShow.UnitType = this._unitList[this.comboBoxUnits.SelectedIndex].id;
this._prodToShow.UnitValue = float.Parse(this._unitList[this.comboBoxUnits.SelectedIndex].unit);
if (String.Equals(this.btnNewProdOpType.Text, "+"))
{
this._prodToShow.AddEquals = true;
}
else
{
this._prodToShow.AddEquals = false;
}
this._workerThread.Start();
新的代码或必须更新时的代码
if (prodExistOnDoc)
{
using (SqlCommand cmd = con.CreateCommand())
{
float total = 0;
if (this._prodToShow.AddEquals)
{
total = this._prodToShow.PreviousQtd + this._prodToShow.Qtd;
}
else
{
total = this._prodToShow.Qtd;
}
cmd.CommandText = "UPDATE Pda_Lancamentos_lin Cod_Art = @codArt, Descricao = @descr, Qtd = @Qtd, Preço = @price, id_uni = @unitID, unidade = @unit "
+ "WHERE Tipo = @type AND Identificador = @iden AND Cod_Barras = @codBar";
cmd.Parameters.AddWithValue("@type", this._tempDocInfo.Type);
cmd.Parameters.AddWithValue("@iden", this._IdentifierToCheck);
cmd.Parameters.AddWithValue("@codBar", this._CodBarToCheck);
cmd.Parameters.AddWithValue("@codArt", this._prodToShow.Ref);
cmd.Parameters.AddWithValue("@descr", this._prodToShow.Descr);
cmd.Parameters.AddWithValue("@Qtd", total);
cmd.Parameters.AddWithValue("@price", this._prodToShow.Price);
cmd.Parameters.AddWithValue("@unitID", this._prodToShow.UnitType);
cmd.Parameters.AddWithValue("@unit", this._prodToShow.UnitValue);
cmd.ExecuteNonQuery();
}
}
// New prod to the document
else
{
using (SqlCommand cmd = con.CreateCommand())
{
cmd.CommandText = "INSERT INTO Pda_Lancamentos_Lin (Tipo, Identificador, Cod_Barras, Cod_Art, Descricao, Qtd, Preço, id_uni, unidade) VALUES " +
"(@type, @iden, @codBar, @codArt, @descr, @Qtd, @price, @unitID, @unit)";
cmd.Parameters.AddWithValue("@type", this._tempDocInfo.Type);
cmd.Parameters.AddWithValue("@iden", this._IdentifierToCheck);
cmd.Parameters.AddWithValue("@codBar", this._CodBarToCheck);
cmd.Parameters.AddWithValue("@codArt", this._prodToShow.Ref);
cmd.Parameters.AddWithValue("@descr", this._prodToShow.Descr);
cmd.Parameters.AddWithValue("@Qtd", this._prodToShow.Qtd);
cmd.Parameters.AddWithValue("@price", this._prodToShow.Price);
cmd.Parameters.AddWithValue("@unitID", this._prodToShow.UnitType);
cmd.Parameters.AddWithValue("@unit", this._prodToShow.UnitValue);
cmd.ExecuteNonQuery();
}
}
从我对异常的理解是说我无法访问Forms.Control但是我没有访问任何类型的东西,在更新中唯一的区别是我必须计算qtd如果需要添加到上一个,我确实将我需要的所有内容传递给变量,这样我就不会从UI线程访问这些东西来防止这个错误
Rly不理解-1所有rdy ...因为同一个对象在插入上工作,唯一的区别是我在更新时创建了一些计算,并且创建了变量后台线程......
答案 0 :(得分:0)
在表名后忘了大坝'套' - 时间休息一下