Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 同一对象在更新时发生异常,但在插入时未发生异常_C#_Sql_Compact Framework - Fatal编程技术网

C# 同一对象在更新时发生异常,但在插入时未发生异常

C# 同一对象在更新时发生异常,但在插入时未发生异常,c#,sql,compact-framework,C#,Sql,Compact Framework,我确实使用这些信息构建了一个对象,之后它将在后台线程上运行,以完成必须对DB执行的操作 同一个对象是以同样的方式构建的,因此它将查看数据库中是否存在所有rdy,如果存在,它将更新它,如果不插入新的rdy 插入确实在100%下工作,但当我尝试更新时出错 必须使用Invoke与在上创建的控件进行交互 分开的线 在Microsoft.AGL.Common.MISC.HandleAr(PAL_ERROR ar)处 System.Windows.Forms.Control.get_Text()位于 Sys

我确实使用这些信息构建了一个对象,之后它将在后台线程上运行,以完成必须对DB执行的操作

同一个对象是以同样的方式构建的,因此它将查看数据库中是否存在所有rdy,如果存在,它将更新它,如果不插入新的rdy

插入确实在100%下工作,但当我尝试更新时出错

必须使用Invoke与在上创建的控件进行交互 分开的线

在Microsoft.AGL.Common.MISC.HandleAr(PAL_ERROR ar)处 System.Windows.Forms.Control.get_Text()位于 System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior cmdBehavior、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,如果需要添加到上一个,我会把我需要的所有东西都传递给后台线程到一个变量中,所以我不会从UI线程访问这些东西来防止这个错误


我不明白-1的意思。。。由于同一个对象在insert上工作,唯一的区别是当它是一个更新并且变量是在后台线程上创建的时,我正在进行一些计算

忘记了表名后面的dam“set”-该休息一下了