/// <summary> /// 生成要执行的命令 /// </summary> private static void PrepareCommand(DbCommand cmd, DbConnection conn, DbTransaction trans, CommandType cmdType, string cmdText, DbParameter[] cmdParms) { // 如果存在参数,则表示用户是用参数形式的SQL语句,可以替换 if (cmdParms != null && cmdParms.Length > 0) cmd.CommandText = cmdText.Replace("?", "@").Replace(":", "@"); if (conn.State != ConnectionState.Open) conn.Open(); cmd.Connection = conn; cmd.CommandText = cmdText; if (trans != null) cmd.Transaction = trans; cmd.CommandType = cmdType; if (Equals(cmdParms, null)) return; foreach (var parm in cmdParms.Cast<OleDbParameter>()) { // 如果存在参数,则表示用户是用参数形式的SQL语句,可以替换 parm.ParameterName = parm.ParameterName.Replace("?", "@").Replace(":", "@"); // 这是Access的一个bug,时间类型必须转化为字符串类型 if (DbType.Date.Equals(parm.DbType) || DbType.DateTime.Equals(parm.DbType) || DbType.Time.Equals(parm.DbType) || DbType.DateTime2.Equals(parm.DbType) || DbType.DateTimeOffset.Equals(parm.DbType)) parm.DbType = DbType.String; if (Equals(parm.Value, null)) parm.Value = DBNull.Value; cmd.Parameters.Add(parm); } }