C# DatagridView布尔值更新到数据库

C# DatagridView布尔值更新到数据库,c#,database,datagridview,boolean,C#,Database,Datagridview,Boolean,在将值从datagridview行更新到数据库时出现问题。问题是我在DB中设计了一个表,其中某些字段是“bit”数据类型,用于存储布尔值标志 当我将datatable分配给datagridview时,系统会自动将这些特定字段显示为复选框,这非常适合我 但是当我尝试将这些值更新回数据库时,布尔值会变得异常…这是我的代码 int fragileChk = (Convert.ToBoolean(aRow.Cells[12].Value) ? 1 : 0); int inflamChk = (Conve

在将值从datagridview行更新到数据库时出现问题。问题是我在DB中设计了一个表,其中某些字段是“bit”数据类型,用于存储布尔值标志

当我将datatable分配给datagridview时,系统会自动将这些特定字段显示为复选框,这非常适合我

但是当我尝试将这些值更新回数据库时,布尔值会变得异常…这是我的代码

int fragileChk = (Convert.ToBoolean(aRow.Cells[12].Value) ? 1 : 0);
int inflamChk = (Convert.ToBoolean(aRow.Cells[13].Value) ? 1 : 0);
int biologicalChk = (Convert.ToBoolean(aRow.Cells[15].Value) ? 1 : 0);
int emergencyChk = (Convert.ToBoolean(aRow.Cells[16].Value) ? 1 : 0);
int usedChk = (Convert.ToBoolean(aRow.Cells[25].Value) ? 1 : 0);
int offerChk = (Convert.ToBoolean(aRow.Cells[27].Value) ? 1 : 0);

string err;
string sqlComm = "UPDATE [70_warehouse_lines] SET " +
                 "ProductDescr = '" + aRow.Cells[5].Value.ToString() + "', " +
                 "PartNumber = '" + aRow.Cells[6].Value.ToString() + "', " +
                 "SerialNumber = '" + aRow.Cells[7].Value.ToString() + "', " +
                 "Quanitity = " + aRow.Cells[8].Value + ", " +
                 "Weight = " + aRow.Cells[10].Value + ", " +
                 "FragileFlag = " + fragileChk + ", " +
                 "InflammableFlag =" + inflamChk + ", " +
                 "BiologicalFlag = " + biologicalChk + ", " +
                 "EmergencyFlag = " + emergencyChk + ", " +
                 "SpecialInstructions = '" + aRow.Cells[17].Value.ToString() + "', " +
                 "ShopCostPrice = " + aRow.Cells[19].Value + ", " +
                 "RetailPrice1  = " + aRow.Cells[20].Value + ", " +
                 "RetailPrice2 = " + aRow.Cells[21].Value + ", " +
                 "WholePrice1 = " + aRow.Cells[22].Value + ", " +
                 "WholePrice2 = " + aRow.Cells[23].Value + ", " +
                 "CalculatedPrice = " + aRow.Cells[24].Value + ", " +
                 "UsedParts = " + usedChk + ", " +
                 "TimesProcessed = " + aRow.Cells[26].Value + ", " +
                 "OnOffer = " + offerChk + ", " +
                 "NotesPerPart = '" + aRow.Cells[28].Value.ToString() + "' " +
                 "WHERE WarehouseLineID = '" + aRow.Cells[0].Value.ToString() + "'";

myConn.ExecSqlCmd(sqlComm, out err);                                  

有什么想法吗?(我声明int值仅用于诊断目的。提前感谢您的帮助。

始终使用参数化查询,当数据库与程序接口结合使用时,使用参数有助于防止SQL注入攻击。 此外,您还可以在参数化查询中指定数据类型,这对您的情况很有帮助

string sqlComm = "UPDATE [70_warehouse_lines] SET " +
                             "ProductDescr = @ProductDescr " +
                             "PartNumber = @PartNumber " +
                             "SerialNumber = @SerialNumber  " +
                             "Quanitity = @Quanitity" +
                             "Weight = @Weight" +
                             "FragileFlag = @FragileFlag" +
                             "InflammableFlag = @InflammableFlag" +
                             "BiologicalFlag = @BiologicalFlag" +
                             "EmergencyFlag = @EmergencyFlag" +
                             "SpecialInstructions = @SpecialInstructions " +
                             "ShopCostPrice = @ShopCostPrice" +
                             "RetailPrice1  = @RetailPrice1" +
                             "RetailPrice2 = @RetailPrice2 " +
                             "WholePrice1 = @WholePrice1 " +
                             "WholePrice2 = @WholePrice2 " +
                             "CalculatedPrice = @CalculatedPrice " +
                             "UsedParts = @UsedParts  " +
                             "TimesProcessed = @TimesProcessed " +
                             "OnOffer = @OnOffer  " +
                             "NotesPerPart = @NotesPerPart" +
                             "WHERE WarehouseLineID = @WarehouseLineID ";
        MySqlCommand cmd = new MySqlCommand(sqlComm);
        cmd.Parameters.Add("@FragileFlag", MySqlDbType.Bit).Value = (Convert.ToBoolean(aRow.Cells[12].Value) ? 1 : 0);
        cmd.Parameters.Add("@InflammableFlag", MySqlDbType.Bit).Value=(Convert.ToBoolean(aRow.Cells[13].Value) ? 1 : 0);
            cmd.Parameters.Add("@BiologicalFlag", MySqlDbType.Bit).Value=(Convert.ToBoolean(aRow.Cells[15].Value) ? 1 : 0);
            cmd.Parameters.Add("@EmergencyFlag", MySqlDbType.Bit).Value = (Convert.ToBoolean(aRow.Cells[16].Value) ? 1 : 0);
....................................
....................................
....................................
    and so on

cmd.ExecuteNonQuery();

请更准确地描述您的错误。您能更具体地描述您的错误吗?例如,您所说的“布尔值失控”是什么意思?我建议将堆栈跟踪和/或输出添加到问题中。屏幕上的值(例如复选框)未在数据库中更新。这意味着,如果我选中复选框,我希望值在数据库中更新,并且在重新加载数据表后,我希望看到datagrid上的更改。不幸的是,这没有发生。这就是我试图找出的。为什么不更新布尔值。这不是构建SQL的方法-使用参数;如果是一个表,则使用数据源并使用DataAdapter进行更新。我的代码中通常使用参数化查询。为此,我想执行一个简单的SQL命令。我知道SQL注入攻击,因为它们在几年前就出现了:)…我将尝试您的解决方案并让您知道。Dexter,不幸的是,它不起作用,即使有参数,您如何使用数据适配器来更新值?问题是,现在我已经查找了一些,这些值没有反映在为更新而传递的变量上。就好像单元格上的单击事件不起作用一样!。。。有什么想法吗?你能分享你的完整代码吗?这样我们就可以了解你想做什么,以及你在代码方面面临什么问题。我的代码在具体方面没有问题。我所面临并试图解决的问题是,为什么当我单击datagridview的复选框列时,该值没有改变。我会尝试一些东西,如果有用的话,我会把它贴在这里。先谢谢你