C# DatagridView布尔值更新到数据库
在将值从datagridview行更新到数据库时出现问题。问题是我在DB中设计了一个表,其中某些字段是“bit”数据类型,用于存储布尔值标志 当我将datatable分配给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
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的复选框列时,该值没有改变。我会尝试一些东西,如果有用的话,我会把它贴在这里。先谢谢你