Пример #1
0
 private void SetCommandText(string commandText, bool isProc)
 {
     _com.CommandText = isProc ? commandText : SqlFormat.Compatible(commandText, dalType, false);
     if (!isProc && dalType == DalType.SQLite && _com.CommandText.Contains("charindex"))
     {
         _com.CommandText += " COLLATE NOCASE";//忽略大小写
     }
     _com.CommandType = isProc ? CommandType.StoredProcedure : CommandType.Text;
     if (isProc)
     {
         if (commandText.Contains("SelectBase") && !_com.Parameters.Contains("ReturnValue"))
         {
             AddReturnPara();
             //检测是否存在分页存储过程,若不存在,则创建。
             Tool.DBTool.CreateSelectBaseProc(dalType, conn);//内部分检测是否已创建过。
         }
     }
     else
     {
         //取消多余的参数,新加的小贴心,过滤掉用户不小心写多的参数。
         if (_com != null && _com.Parameters != null && _com.Parameters.Count > 0)
         {
             bool   needToReplace = (dalType == DalType.Oracle || dalType == DalType.MySql) && _com.CommandText.Contains("@");
             string paraName;
             for (int i = 0; i < _com.Parameters.Count; i++)
             {
                 paraName = _com.Parameters[i].ParameterName.TrimStart(Pre);//默认自带前缀的,取消再判断
                 if (needToReplace && _com.CommandText.IndexOf("@" + paraName) > -1)
                 {
                     //兼容多数据库的参数(虽然提供了=:?"为兼容语法,但还是贴心的再处理一下)
                     switch (dalType)
                     {
                     case DalType.Oracle:
                     case DalType.MySql:
                         _com.CommandText = _com.CommandText.Replace("@" + paraName, Pre + paraName);
                         break;
                     }
                 }
                 if (_com.CommandText.IndexOf(Pre + paraName, StringComparison.OrdinalIgnoreCase) == -1)
                 {
                     _com.Parameters.RemoveAt(i);
                     i--;
                 }
             }
         }
     }
     //else
     //{
     //    string checkText = commandText.ToLower();
     //    //int index=
     //    //if (checkText.IndexOf("table") > -1 && (checkText.IndexOf("delete") > -1 || checkText.IndexOf("drop") > -1 || checkText.IndexOf("truncate") > -1))
     //    //{
     //    //    Log.WriteLog(commandText);
     //    //}
     //}
     if (IsAllowRecordSql)
     {
         tempSql = GetParaInfo(_com.CommandText) + AppConst.BR + "execute time is: ";
     }
 }
Пример #2
0
 private void SetCommandText(string commandText, bool isProc)
 {
     if (OracleDal.clientType > 0)
     {
         Type t = _com.GetType();
         System.Reflection.PropertyInfo pi = t.GetProperty("BindByName");
         if (pi != null)
         {
             pi.SetValue(_com, true, null);
         }
     }
     _com.CommandText = isProc ? commandText : SqlFormat.Compatible(commandText, DataBaseType, false);
     if (!isProc && DataBaseType == DataBaseType.SQLite && _com.CommandText.Contains("charindex"))
     {
         _com.CommandText += " COLLATE NOCASE";//忽略大小写
     }
     //else if (isProc && dalType == DalType.MySql)
     //{
     //    _com.CommandText = "Call " + _com.CommandText;
     //}
     _com.CommandType = isProc ? CommandType.StoredProcedure : CommandType.Text;
     //if (isProc)
     //{
     //    if (commandText.Contains("SelectBase") && !_com.Parameters.Contains("ReturnValue"))
     //    {
     //        AddReturnPara();
     //        //检测是否存在分页存储过程,若不存在,则创建。
     //        Tool.DBTool.CreateSelectBaseProc(DataBaseType, ConnName);//内部分检测是否已创建过。
     //    }
     //}
     //else
     //{
     //上面if代码被注释了,下面代码忘了加!isProc判断,现补上。 取消多余的参数,新加的小贴心,过滤掉用户不小心写多的参数。
     if (!isProc && _com != null && _com.Parameters != null && _com.Parameters.Count > 0)
     {
         bool   needToReplace = (DataBaseType == DataBaseType.Oracle || DataBaseType == DataBaseType.MySql) && _com.CommandText.Contains("@");
         string paraName;
         for (int i = 0; i < _com.Parameters.Count; i++)
         {
             paraName = _com.Parameters[i].ParameterName.TrimStart(Pre);//默认自带前缀的,取消再判断
             if (needToReplace && _com.CommandText.IndexOf("@" + paraName) > -1)
             {
                 //兼容多数据库的参数(虽然提供了=:?"为兼容语法,但还是贴心的再处理一下)
                 switch (DataBaseType)
                 {
                 case DataBaseType.Oracle:
                 case DataBaseType.MySql:
                     _com.CommandText = _com.CommandText.Replace("@" + paraName, Pre + paraName);
                     break;
                 }
             }
             if (_com.CommandText.IndexOf(Pre + paraName, StringComparison.OrdinalIgnoreCase) == -1)
             {
                 _com.Parameters.RemoveAt(i);
                 i--;
             }
         }
     }
     // }
     //else
     //{
     //    string checkText = commandText.ToLower();
     //    //int index=
     //    //if (checkText.IndexOf("table") > -1 && (checkText.IndexOf("delete") > -1 || checkText.IndexOf("drop") > -1 || checkText.IndexOf("truncate") > -1))
     //    //{
     //    //    Log.WriteLog(commandText);
     //    //}
     //}
     if (IsRecordDebugInfo)
     {
         tempSql = GetParaInfo(_com.CommandText) + AppConst.BR + "execute time is: ";
     }
 }