有个存储过程内容如下:
   
 public static int InsertProfile(Profile model)
public static int InsertProfile(Profile model)


 {
{
 try
    try

 
     {
{            
 DbCommand dbc = m_Db.GetStoredProcCommand("Profile_Insert");
    DbCommand dbc = m_Db.GetStoredProcCommand("Profile_Insert");
 
    
 m_Db.AddInParameter(dbc, "@pSourceID", DbType.String, model.SourceID);
    m_Db.AddInParameter(dbc, "@pSourceID", DbType.String, model.SourceID);
 m_Db.AddInParameter(dbc, "@pName", DbType.String, model.Name);
    m_Db.AddInParameter(dbc, "@pName", DbType.String, model.Name);               
 m_Db.AddInParameter(dbc, "@pAddress", DbType.String, model.Address);
    m_Db.AddInParameter(dbc, "@pAddress", DbType.String, model.Address);
 m_Db.AddInParameter(dbc, "@pCity", DbType.String, model.City);
    m_Db.AddInParameter(dbc, "@pCity", DbType.String, model.City);                       
 m_Db.AddInParameter(dbc, "@pTel", DbType.String, model.Tel);
    m_Db.AddInParameter(dbc, "@pTel", DbType.String, model.Tel);
 m_Db.AddInParameter(dbc, "@pCode", DbType.String, model.code);
    m_Db.AddInParameter(dbc, "@pCode", DbType.String, model.code);               
 
    
 object obj = m_Db.ExecuteScalar(dbc);
    object obj = m_Db.ExecuteScalar(dbc);
 if (obj != null)
    if (obj != null)

 
     {
{
 return int.Parse(obj.ToString());
        return int.Parse(obj.ToString());
 }
    }
 else
    else

 
     {
{
 return 0;
        return 0;
 }
    }
 }
    }
 catch (System.Exception e)
    catch (System.Exception e)

 
     {
{               
 return 0;
    return 0;
 }
    }
 }
}上面的AddInParameter的参数顺序和Profile_insert在数据库中定义的参数顺序不同。之前都能正常工作,上周六突然发现不行了,实际写入表的时候,顺序乱掉了,直到今天才找到解决方案:
把AddIn的参数顺序和声明的参数保持一致。这个问题太奇怪了。大概环境是,表的存储引擎为MyISAM,上百万记录,mysql部署在ubuntu,mysql版本5.1.53。
      最开始的思路是:
      1. 代码问题      
      2. DbCommand dbc = m_Db.GetStoredProcCommand("Profile_Insert");的多线程调用
      3. mysql的配置问题
思维定势导致没怀疑过参数顺序,上面存储过程是为说明问题而临时改动的,实际系统中的存储过程和业务有很强的关联,不方便介绍.