// // Licensed to the Apache Software Foundation (ASF) under one or more // contributor license agreements. See the NOTICE file distributed with // this work for additional information regarding copyright ownership. // The ASF licenses this file to You under the Apache License, Version 2.0 // (the "License"); you may not use this file except in compliance with // the License. You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // // .Net StockTrader Sample WCF Application for Benchmarking, Performance Analysis and Design Considerations for Service-Oriented Applications //=============================================================================================== // Customer is part of the SQLServer DAL for StockTrader. This is called from the // BSL to execute commands against the database. It is constructed to use one SqlConnection per // instance. Hence, BSLs that use this DAL should always be instanced properly. // The DAL will work with both ADO.NET and System.Transactions or ServiceComponents/Enterprise // Services attributed transactions [autocomplete]. When using ADO.NET transactions, // The BSL will control the transaction boundaries with calls to dal.BeginTransaction(); // dal.CommitTransaction(); dal.RollbackTransaction(). //=============================================================================================== //====================================================================================================== // Code originally contributed by Microsoft Corporation. // This contribution to the Stonehenge project is limited strictly // to the source code that is submitted in this submission. // Any technology, including underlying platform technology, // that is referenced or required by the submitted source code // is not a part of the contribution. // For example and not by way of limitation, // any systems/Windows libraries (WPF, WCF, ASP.NET etc.) // required to run the submitted source code is not a part of the contribution //====================================================================================================== using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Text; using System.Collections; using MySql.Data; using MySql.Data.MySqlClient; namespace Trade.PassiveStsDalMySql { public abstract class MySQLHelper { private static Hashtable parmCache = Hashtable.Synchronized(new Hashtable()); public static MySqlDataReader ExecuteReaderSingleParm(MySqlConnection conn, MySqlTransaction trans, CommandType cmdType, string cmdText, MySqlParameter singleParm) { MySqlCommand cmd = new MySqlCommand(); if (conn.State != ConnectionState.Open) conn.Open(); cmd.Connection = conn; if (trans != null) cmd.Transaction = trans; cmd.CommandText = cmdText; cmd.Parameters.Add(singleParm); MySqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.SingleResult); return rdr; } public static MySqlDataReader ExecuteReaderSingleRowSingleParm(MySqlConnection conn, MySqlTransaction trans, CommandType cmdType, string cmdText, MySqlParameter singleParm) { if (conn.State != ConnectionState.Open) conn.Open(); MySqlCommand cmd = new MySqlCommand(); cmd.Connection = conn; if (trans != null) cmd.Transaction = trans; cmd.CommandText = cmdText; cmd.Parameters.Add(singleParm); MySqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.SingleRow); return rdr; } public static MySqlDataReader ExecuteReaderSingleRow(MySqlConnection conn, MySqlTransaction trans, CommandType cmdType, string cmdText, MySqlParameter[] cmdParms) { if (conn.State != ConnectionState.Open) conn.Open(); MySqlCommand cmd = new MySqlCommand(); cmd.Connection = conn; if (trans != null) cmd.Transaction = trans; cmd.CommandText = cmdText; PrepareCommand(cmd, cmdParms); MySqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.SingleRow); return rdr; } public static MySqlDataReader ExecuteReaderNoParm(MySqlConnection conn, MySqlTransaction trans, CommandType cmdType, string cmdText) { if (conn.State != ConnectionState.Open) conn.Open(); MySqlCommand cmd = new MySqlCommand(); cmd.Connection = conn; if (trans != null) cmd.Transaction = trans; cmd.CommandText = cmdText; MySqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.SingleResult); return rdr; } public static MySqlDataReader ExecuteReader(MySqlConnection conn, MySqlTransaction trans, CommandType cmdType, string cmdText, params MySqlParameter[] cmdParms) { if (conn.State != ConnectionState.Open) conn.Open(); MySqlCommand cmd = new MySqlCommand(); cmd.Connection = conn; if (trans != null) cmd.Transaction = trans; cmd.CommandText = cmdText; PrepareCommand(cmd, cmdParms); MySqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.SingleResult); return rdr; } public static int ExecuteScalar(MySqlConnection conn, MySqlTransaction trans, CommandType cmdType, string cmdText, params MySqlParameter[] cmdParms) { if (conn.State != ConnectionState.Open) conn.Open(); MySqlCommand cmd = new MySqlCommand(); cmd.CommandText = cmdText; cmd.Connection = conn; if (trans != null) cmd.Transaction = trans; PrepareCommand(cmd, cmdParms); int val = Convert.ToInt32(cmd.ExecuteScalar()); return val; } public static int ExecuteScalarSingleParm(MySqlConnection conn, MySqlTransaction trans, CommandType cmdType, string cmdText, MySqlParameter singleParm) { if (conn.State != ConnectionState.Open) conn.Open(); MySqlCommand cmd = new MySqlCommand(); cmd.CommandText = cmdText; cmd.Connection = conn; if (trans != null) cmd.Transaction = trans; cmd.Parameters.Add(singleParm); int val = Convert.ToInt32(cmd.ExecuteScalar()); return val; } public static int ExecuteScalarNoParm(MySqlConnection conn, MySqlTransaction trans, CommandType cmdType, string cmdText) { if (conn.State != ConnectionState.Open) conn.Open(); MySqlCommand cmd = new MySqlCommand(); cmd.CommandText = cmdText; cmd.Connection = conn; if (trans != null) cmd.Transaction = trans; int val = Convert.ToInt32(cmd.ExecuteScalar()); return val; } public static int ExecuteNonQuery(MySqlConnection conn, MySqlTransaction trans, CommandType cmdType, string cmdText, params MySqlParameter[] cmdParms) { if (conn.State != ConnectionState.Open) conn.Open(); MySqlCommand cmd = new MySqlCommand(); cmd.Connection = conn; if (trans != null) cmd.Transaction = trans; cmd.CommandText = cmdText; PrepareCommand(cmd, cmdParms); int val = cmd.ExecuteNonQuery(); return val; } public static int ExecuteNonQuerySingleParm(MySqlConnection conn, MySqlTransaction trans, CommandType cmdType, string cmdText, MySqlParameter singleParam) { if (conn.State != ConnectionState.Open) conn.Open(); MySqlCommand cmd = new MySqlCommand(); cmd.Connection = conn; if (trans != null) cmd.Transaction = trans; cmd.CommandText = cmdText; cmd.Parameters.Add(singleParam); int val = cmd.ExecuteNonQuery(); return val; } public static int ExecuteNonQueryNoParm(MySqlConnection conn, MySqlTransaction trans, CommandType cmdType, string cmdText) { if (conn.State != ConnectionState.Open) conn.Open(); MySqlCommand cmd = new MySqlCommand(); cmd.Connection = conn; if (trans != null) cmd.Transaction = trans; cmd.CommandText = cmdText; int val = cmd.ExecuteNonQuery(); return val; } public static void CacheParameters(string cacheKey, params MySqlParameter[] cmdParms) { parmCache[cacheKey] = cmdParms; } public static MySqlParameter[] GetCacheParameters(string cacheKey) { MySqlParameter[] cachedParms = (MySqlParameter[])parmCache[cacheKey]; if (cachedParms == null) return null; MySqlParameter[] clonedParms = new MySqlParameter[cachedParms.Length]; for (int i = 0, j = cachedParms.Length; i < j; i++) clonedParms[i] = (MySqlParameter)((ICloneable)cachedParms[i]).Clone(); return clonedParms; } private static void PrepareCommand(MySqlCommand cmd, MySqlParameter[] cmdParms) { if (cmdParms != null) { for (int i = 0; i < cmdParms.Length; i++) { MySqlParameter parm = (MySqlParameter)cmdParms[i]; cmd.Parameters.Add(parm); } } } } }