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: "; } }
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: "; } }