對於更新Access數據庫的操作,必須保持參數數組與sql語句中參數順序一致,如下:
1 public bool Update(MyModel model) 2 { 3 StringBuilder strSql = new StringBuilder(); 4 strSql.Append("update table1 set "); 5 strSql.Append(" column1 = @column1 , "); 6 strSql.Append(" column2 = @column2, "); 7 strSql.Append(" where ID=@ID "); 8 9 OleDbParameter[] parameters = 10 { 11 // 必須要這個順序 ヾ(。 ̄□ ̄)ツ゜゜゜ 12 new OleDbParameter("@column1", OleDbType.Integer, 4), 13 new OleDbParameter("@column2", OleDbType.Integer, 4), 14 new OleDbParameter("@ID", OleDbType.Integer, 4) 15 }; 16 17 parameters[0].Value = model.column1; 18 parameters[1].Value = model.column1; 19 parameters[2].Value = model.ID; 20 21 int rows = DbHelperOleDb.ExecuteSql(strSql.ToString(), parameters); 22 if (rows > 0) 23 { 24 return true; 25 } 26 else 27 { 28 return false; 29 } 30 }
如果改成下面這樣,順序不一致了,就妥妥的更新失敗,還不報任何異常。。。。
1 public bool Update(MyModel model) 2 { 3 StringBuilder strSql = new StringBuilder(); 4 strSql.Append("update table1 set "); 5 strSql.Append(" column1 = @column1 , "); 6 strSql.Append(" column2 = @column2, "); 7 strSql.Append(" where ID=@ID "); 8 9 OleDbParameter[] parameters = 10 { 11 // 順序與sql語句不一致了 ヾ(。 ̄□ ̄)ツ゜゜゜ 12 new OleDbParameter("@ID", OleDbType.Integer, 4), 13 new OleDbParameter("@column1", OleDbType.Integer, 4), 14 new OleDbParameter("@column2", OleDbType.Integer, 4) 15 }; 16 17 parameters[0].Value = model.ID; 18 parameters[1].Value = model.column1; 19 parameters[2].Value = model.column1; 20 21 int rows = DbHelperOleDb.ExecuteSql(strSql.ToString(), parameters); 22 if (rows > 0) 23 { 24 return true; 25 } 26 else 27 { 28 return false; 29 } 30 }