示例#1
0
 /// <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);
     }
 }