1.給DbCommand抽象類添加一個擴展方法
1 /// <summary> 2 /// 給DbCommand抽象類添加一個擴展方法 3 /// 生成一個最終執行的SQL語句 4 /// </summary> 5 public static class DcCommandHelper 6 { 7 public static string GetExecutedCommand(this DbCommand dbCommand, string commandText, IDbDataParameter[] dbDataParameters) 8 { 9 foreach (var parameter in dbDataParameters) 10 { 11 string pname = parameter.ParameterName; 12 string pvalue = Convert.ToString(parameter.Value); 13 commandText = commandText.Replace(pname, pvalue); 14 } 15 return commandText; 16 } 17 }
2.實際使用案例
1 public static object ExecuteScalar(string commandText, params IDbDataParameter[] dbDataParameters) 2 { 3 using (DbConnection conn = DbFactory.CreateDbConnection(connString, providerName)) 4 { 5 conn.Open(); 6 DbCommand cmd = CreateDbCommand(conn, commandText, CommandType.Text, dbDataParameters); 7 string sqlCommand = cmd.GetExecutedCommand(commandText, dbDataParameters); 8 Console.WriteLine(sqlCommand); 9 return cmd.ExecuteScalar(); 10 } 11 }
1 class Program 2 { 3 static void Main(string[] args) 4 { 5 string sql = "select * from dbo.aspnet_Users where UserName = @UserName or UserId =@UserId"; 6 DAL.DbHelper.ExecuteScalar(sql, 7 new SqlParameter("@UserName", "admin"), 8 new SqlParameter("@UserId", "522C7EFE-DC3A-45E8-B101-DFFDC005CC68")); 9 Console.ReadKey(); 10 } 11 }
3.控制台窗口執行結果:select * from dbo.aspnet_Users where UserName = admin or UserId =522C7EFE-DC3A-45E8-B101-DFFDC005CC68
PS:說白了就是字符串替換而已。