Я строю объект с информацией, что после этого он будет работать в фоновом потоке, чтобы сделать то, что должно быть сделано с БД.
Один и тот же объект всегда создается одинаково, поэтому он увидит, существуют ли все rdy внутри БД, если он это сделает, обновит его, если не вставит новый.
Вставка работала на все 100%, но при попытке обновления возникла ошибка
Control.Invoke должен использоваться для взаимодействия с элементами управления, созданными на
отдельная тема.
в Microsoft.AGL.Common.MISC.HandleAr (PAL_ERROR ar) в
System.Windows.Forms.Control.get_Text () в
System.Data.SqlClient.SqlCommand.ExecuteReader (CommandBehavior
cmdBehavior, RunBehavior runBehavior, Boolean returnStream) в
System.Data.SqlClient.SqlCommand.ExecuteNonQuery () в
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, если нужно добавить к предыдущему, и я передаю все, что мне нужно, в фоновый поток в переменную, чтобы я не получил доступ к материалу из потока пользовательского интерфейса, чтобы предотвратить эту ошибку
Rly не понимает -1 все rdy ... так как один и тот же объект работает на вставке, единственное отличие состоит в том, что я делаю некоторые вычисления, когда его обновление и переменная создаются в фоновом потоке. ..