1.更新表中的数据
如有表1,字段包括设备编号(key),质量,材质,尺寸等等。要求更新的时候,表中没有改设备记录,则新增改设备,否则更新该设备其他的字段。返回1或者0,表示本记录更新成功。
2.有数据库表2,表3里面的字段完全一样,如表2有设备编号(key),datatme(key)和价格,而表3里面有设备编号(key),datetime和价格。要求定时把表3的记录导入表2中,且删除表3的记录。
谢谢啦~~

解决方案 »

  1.   

    http://blog.csdn.net/acmain_chm/article/details/7703870
    定时执行mysql数据库任务方案
    命题: 每日 02:00 am 定时删除 表 t (id int primary key,ptime TIMESTAMP DEFAULT CURRENT_TIMESTAMP) 中三天以前的记录。 ======================================= 方法一:操作系统 ======================================= (...
      

  2.   


    CREATE DEFINER = CURRENT_USER FUNCTION `NewProc`(`url` varchar,`id` int,`cataLogType` int,`parentID` int,`parentType` int,`caption` varchar)
     RETURNS int(32)
    BEGIN
            DECLARE iCount int DEFAULT 0 ;
            iCount = SELECT COUNT(*) FROM catalog WHERE url = url;
            IF iCount == 0 THEN
                INSERT INTO catalog VALUES(url,id,cataLogType,parentID,parentType,caption);
                RETURN 1;
            ELSE
                UPDATE catalog SET id=id,cataLogType=cataLogType,parentID=parentID,parentType=parentType,caption=caption WHERE url=url;
                 RETURN 0; 
            END  IF; 

    END;;
    //问题是保存上面的存储过处出错。提示:1064-You have an error in your SQL syntax;check the manual that corresponds to your MySQL server version for the right syntax to use near 'id' int ......
    可能是ID是关键字,不让用,请问是不是这个回事呢?
    上面是我的存储过程,catalog是一个表名。有字段url,id,cataLogType,parentID,parentType,caption
    我的参数是
            MySqlParameter[] pramsCatalog ={new MySqlParameter(@"?url", MySqlDbType.VarChar,256),
                                            new MySqlParameter(@"?id",MySqlDbType.Int32),
                                            new MySqlParameter(@"?cataLogType",MySqlDbType.Int32),
                                            new MySqlParameter(@"?parentID",MySqlDbType.Int32),
                                            new MySqlParameter(@"?parentType", MySqlDbType.Int32),
                                            new MySqlParameter(@"?caption",MySqlDbType.VarChar,256)};
      

  3.   


    begin
    DECLARE iCount int DEFAULT 0 ;
    SELECT COUNT(*) FROM catalog WHERE url = url into iCount;
     IF iCount = 0 THEN
     INSERT INTO catalog VALUES(url,id,cataLogType,parentID,parentType,caption);
      ELSE
     UPDATE catalog SET id=id,cataLogType=cataLogType,parentID=parentID,parentType=parentType,caption=caption WHERE url=url;
     END  IF; 
    end经过不断尝试,已经可以调用存储过程写数据了,谢谢大家。不过还有一个问题就是我存入的中文乱码,不知道改哪里可以修改数据库编码格式?
      

  4.   

    http://blog.csdn.net/ACMAIN_CHM/archive/2009/05/12/4174186.aspx
    MySQL 中文显示乱码
      

  5.   

    SELECT COUNT(*) FROM catalog WHERE url = url into iCount;  好像有问题,url = url  是恒等,其实我要的效果是如果当前url在数据库存在就更新该记录。
      

  6.   

    问题解决,请不要回复了。解决非法就是参数重新命名。结果如SELECT COUNT(*) FROM catalog WHERE url = in_url into iCount;//还有一个效率问题,不知道怎么提升,6万多行的数据导入大概花了40分钟,哎
    我把代码贴出来,请帮忙看看

    1.启动线程,读从文件中读取记录然后导入数据库        private void Running()
            {
                df = new DataFactry("DataBase.SQL.clsSQL");
                df.OnReportEvent += new DataFactry.ReportEventHandler(df_OnReportEvent);  //声明事件
                DateTime dt = DateTime.Now;
                //从文件中读取数据,然后导入数据库
                using (StreamReader Reader = new StreamReader(path))
                {
                    string sLine = Reader.ReadLine();
                    while (sLine != null)
                    {
                        if (!sLine.Equals("")) //读取一行数据
                        {
                            //setMessage(sLine);
                            switch (doFlag)
                            {
                                case 0:  //价格
                                    df.savePrice(sLine, dt);
                                    break;
                                case 1:   //商品
                                    df.saveProduct(sLine);
                                    break;
                                case 2:   //目录
                                    df.saveCataLog(sLine);
                                    break;
                            }
                        }
                        sLine = Reader.ReadLine();
                    }
                    Reader.Close();
                }
                setMessage("数据导入完毕,请查看数据库");
                try { thread.Abort(); }       //结束线程
                catch { }
                finally{thread = null;}
            }2.根据从文件中读取的记录,分割后存储在内存目录类实例中        /// <summary>
            /// 保存目录数据
            /// </summary>
            /// <param name="msg">从文件中读取的目录数据</param>
            /// <returns>0:保存成功,其他:失败</returns>
            public int saveCataLog(string msg)
            {
                int rst = 0;
                stCatalog c = new stCatalog();
                if (updateCatalog(msg, ref c) == 1)
                    rst = db.setCataLog(c);
                OnReportEvent(this, new ReportEventArgss(string.Format("目录[{0}]信息更新{1}.", c.caption, (rst == 0 ? "失败" : "成功"))));
                return rst;
            }3.调用存储过程,导入数据库        public int setCataLog(stCatalog catalog)
            {
                //throw new NotImplementedException();
                //构造合适的SQL语句
                //执行insert命令(在函数EditData)            pramsCatalog[0].Value = catalog.url;
                pramsCatalog[1].Value = catalog.id;
                pramsCatalog[2].Value = catalog.cataLogType;
                pramsCatalog[3].Value = catalog.parentID;
                pramsCatalog[4].Value = catalog.parentType;
                pramsCatalog[5].Value = catalog.caption;
                if (ExecuteProcedure("SaveCatalog", pramsCatalog)) return 1;
                else return 0;
            }4.执行存储过程函数/// <summary>
            /// 执行命令或存储过程,返回MySqlDataReader对象
            /// 注意MySqlDataReader对象使用完后必须Close以释放MySqlConnection资源
            /// </summary>
            /// <param name="connectionString">数据库连接字符串</param>
            /// <param name="cmdType">命令类型(存储过程或SQL语句)</param>
            /// <param name="cmdText">SQL语句或存储过程名</param>
            /// <param name="cmdParms">MySqlCommand参数数组</param>
            /// <returns></returns>
            public bool ExecuteProcedure (string ProcedureName, MySqlParameter[] cmdParms)
            {
                
                //打开数据库链接,如果非关闭状态 ,就不用再打开
                try
                {
                  if (mysqlConnection.State == System.Data.ConnectionState.Closed ) mysqlConnection.Open();
                }
                catch(MySqlException e)
                {
                    mysqlConnection.Close();
                    return false;
                }            //执行存储过程
                try
                {
                    MySqlCommand myCommand = new MySqlCommand(ProcedureName,mysqlConnection);
                    myCommand.CommandType = CommandType.StoredProcedure;
                    foreach (MySqlParameter p in cmdParms)
                    {
                        myCommand.Parameters.Add(p);
                    }
                    myCommand.ExecuteNonQuery();
                }  
                catch(MySqlException e)
                {
                    mysqlConnection.Close();
                    return false;
                }
                return true;
            }5.存储过程函数begin
    DECLARE iCount int DEFAULT 0 ;
    SELECT COUNT(*) FROM catalog WHERE url = in_url into iCount;
     IF iCount = 0 THEN
     INSERT INTO catalog VALUES(in_url,in_id,in_cataLogType,in_parentID,in_parentType,in_caption);
      ELSE
     UPDATE catalog SET id=in_id,cataLogType=in_cataLogType,parentID=in_parentID,parentType=in_parentType,caption=in_caption WHERE url=in_url;
     END  IF; 
    end