You are viewing a plain text version of this content. The canonical link for it is here.
Posted to stonehenge-commits@incubator.apache.org by be...@apache.org on 2009/09/22 19:34:25 UTC
svn commit: r817792 - in
/incubator/stonehenge/trunk/stocktrader/dotnet/common/StockTraderDALMySQL:
./ Customer.cs MarketSummary.cs MySQLHelper.cs Order.cs
StockTraderDALMySQL.csproj stocktrader.snk
Author: bendewey
Date: Tue Sep 22 19:34:18 2009
New Revision: 817792
URL: http://svn.apache.org/viewvc?rev=817792&view=rev
Log:
STONEHENGE-53 (Part2) sorry Joby
Added:
incubator/stonehenge/trunk/stocktrader/dotnet/common/StockTraderDALMySQL/
incubator/stonehenge/trunk/stocktrader/dotnet/common/StockTraderDALMySQL/Customer.cs
incubator/stonehenge/trunk/stocktrader/dotnet/common/StockTraderDALMySQL/MarketSummary.cs
incubator/stonehenge/trunk/stocktrader/dotnet/common/StockTraderDALMySQL/MySQLHelper.cs
incubator/stonehenge/trunk/stocktrader/dotnet/common/StockTraderDALMySQL/Order.cs
incubator/stonehenge/trunk/stocktrader/dotnet/common/StockTraderDALMySQL/StockTraderDALMySQL.csproj
incubator/stonehenge/trunk/stocktrader/dotnet/common/StockTraderDALMySQL/stocktrader.snk (with props)
Added: incubator/stonehenge/trunk/stocktrader/dotnet/common/StockTraderDALMySQL/Customer.cs
URL: http://svn.apache.org/viewvc/incubator/stonehenge/trunk/stocktrader/dotnet/common/StockTraderDALMySQL/Customer.cs?rev=817792&view=auto
==============================================================================
--- incubator/stonehenge/trunk/stocktrader/dotnet/common/StockTraderDALMySQL/Customer.cs (added)
+++ incubator/stonehenge/trunk/stocktrader/dotnet/common/StockTraderDALMySQL/Customer.cs Tue Sep 22 19:34:18 2009
@@ -0,0 +1,563 @@
+//
+// 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.Text;
+using System.Data;
+using MySql.Data.MySqlClient;
+using MySql.Data.Types;
+using Trade.IDAL;
+using Trade.Utility;
+using Trade.ConfigServiceDataContract;
+using Trade.BusinessServiceDataContract;
+
+
+namespace Trade.DALMySQL
+{
+ public class Customer : ICustomer
+ {
+ public Customer()
+ {
+ }
+
+ //Constructor for internal DAL-DAL calls to use an existing DB connection.
+ public Customer(MySqlConnection conn, MySqlTransaction trans)
+ {
+ _internalConnection = conn;
+ _internalADOTransaction = trans;
+ }
+
+ private MySqlConnection _internalConnection;
+ private MySqlTransaction _internalADOTransaction = null;
+
+ //Used only when doing ADO.NET transactions.
+ //This will be completely ignored when null, and not attached to a cmd object
+ //In MySQLHelper unless it has been initialized explicitly in the BSL with a
+ //dal.BeginADOTransaction(). See app config setting in web.config and
+ //Trade.BusinessServiceHost.exe.config "Use System.Transactions Globally" which determines
+ //whether user wants to run with ADO transactions or System.Transactions. The DAL itself
+ //is built to be completely agnostic and will work with either.
+ public void BeginADOTransaction()
+ {
+ if (_internalConnection.State != ConnectionState.Open)
+ _internalConnection.Open();
+ _internalADOTransaction = _internalConnection.BeginTransaction(System.Data.IsolationLevel.ReadCommitted);
+ }
+
+ //Used only when doing ADO.NET transactions.
+ public void RollBackTransaction()
+ {
+ _internalADOTransaction.Rollback();
+ _internalADOTransaction = null;
+ }
+
+ //Used only when doing ADO.NET transactions.
+ public void CommitADOTransaction()
+ {
+ _internalADOTransaction.Commit();
+ _internalADOTransaction = null;
+ }
+
+ public void Open(string connString)
+ {
+ if (_internalConnection == null)
+ _internalConnection = new MySqlConnection(connString);
+ if (_internalConnection.State != ConnectionState.Open)
+ _internalConnection.Open();
+ }
+
+ public void Close()
+ {
+ if (_internalConnection != null && _internalConnection.State != ConnectionState.Closed)
+ _internalConnection.Close();
+ }
+
+ //This would be the more efficient way to get holding data with quote price part of the model class/mapping, but do not use to maintain compatibility with Trade 6.1. While
+ //this query is easy with ADO.NET (or JDBC); it would be very problematic with EJB Entity Beans to do efficiently.
+ //private const string SQL_SELECT_HOLDINGS = "SELECT HOLDING.HOLDINGID, HOLDING.QUANTITY, HOLDING.PURCHASEPRICE, HOLDING.PURCHASEDATE, HOLDING.QUOTE_SYMBOL,HOLDING.ACCOUNT_ACCOUNTID, " +
+ // "QUOTE.PRICE FROM ACCOUNT INNER JOIN HOLDING ON ACCOUNT.ACCOUNTID = HOLDING.ACCOUNT_ACCOUNTID INNER JOIN " +
+ // "QUOTE ON HOLDING.QUOTE_SYMBOL = QUOTE.SYMBOL WHERE (ACCOUNT.PROFILE_USERID = @UserId) ORDER BY HOLDING.HOLDINGID DESC";
+
+ private const string SQL_SELECT_HOLDINGS = @"SELECT HOLDING.HOLDINGID, HOLDING.QUANTITY, HOLDING.PURCHASEPRICE, HOLDING.PURCHASEDATE, HOLDING.QUOTE_SYMBOL,HOLDING.ACCOUNT_ACCOUNTID
+ from holding WHERE HOLDING.ACCOUNT_ACCOUNTID = (SELECT ACCOUNTID FROM ACCOUNT WHERE PROFILE_USERID = ?UserId) ORDER BY HOLDING.HOLDINGID DESC";
+ private const string SQL_SELECT_HOLDING_LOCK = @"SELECT HOLDING.HOLDINGID, HOLDING.ACCOUNT_ACCOUNTID, HOLDING.QUANTITY, HOLDING.PURCHASEPRICE, HOLDING.PURCHASEDATE,
+ HOLDING.QUOTE_SYMBOL FROM HOLDING INNER JOIN ORDERS ON HOLDING.HOLDINGID = ORDERS.HOLDING_HOLDINGID
+ WHERE (ORDERS.ORDERID = ?OrderId)";
+ private const string SQL_SELECT_HOLDING_NOLOCK = "SELECT HOLDING.ACCOUNT_ACCOUNTID, HOLDING.QUANTITY, HOLDING.PURCHASEPRICE, HOLDING.PURCHASEDATE, HOLDING.QUOTE_SYMBOL FROM HOLDING WHERE HOLDING.HOLDINGID=?holdingId AND HOLDING.ACCOUNT_ACCOUNTID = (SELECT ACCOUNTID FROM ACCOUNT WHERE PROFILE_USERID = ?UserId)";
+ private const string SQL_SELECT_GET_CUSTOMER_BYUSERID = "SELECT account.ACCOUNTID, account.PROFILE_USERID, account.CREATIONDATE, account.OPENBALANCE, account.LOGOUTCOUNT, account.BALANCE, account.LASTLOGIN, account.LOGINCOUNT FROM account WHERE account.PROFILE_USERID = ?UserId";
+ private const string SQL_SELECT_CUSTOMERPROFILE_BYUSERID = "SELECT accountprofile.USERID, accountprofile.PASSWORD, accountprofile.FULLNAME, accountprofile.ADDRESS, accountprofile.EMAIL, accountprofile.CREDITCARD FROM accountprofile WHERE accountprofile.USERID = ?UserId";
+ private const string SQL_SELECT_UPDATE_CUSTOMER_LOGIN = "UPDATE account SET LOGINCOUNT = (LOGINCOUNT + 1), LASTLOGIN = CURRENT_TIMESTAMP where PROFILE_USERID= ?UserId; SELECT account.ACCOUNTID, account.CREATIONDATE, account.OPENBALANCE, account.LOGOUTCOUNT, account.BALANCE, account.LASTLOGIN, account.LOGINCOUNT FROM account WHERE account.PROFILE_USERID = ?UserId";
+ private const string SQL_UPDATE_LOGOUT = "UPDATE account SET LOGOUTCOUNT = (LOGOUTCOUNT + 1) where PROFILE_USERID= ?UserId";
+ private const string SQL_UPDATE_ACCOUNTPROFILE = "UPDATE accountprofile SET ADDRESS=?Address, PASSWORD=?Password, EMAIL=?Email, CREDITCARD = ?CreditCard, FULLNAME=?FullName WHERE USERID= ?UserId";
+ private const string SQL_SELECT_CLOSED_ORDERS = "SELECT ORDERID, ORDERTYPE, ORDERSTATUS, COMPLETIONDATE, OPENDATE, QUANTITY, PRICE, ORDERFEE, QUOTE_SYMBOL FROM orders WHERE ACCOUNT_ACCOUNTID = (select accountid from account where profile_userid =?UserId) AND ORDERSTATUS = 'closed'";
+ private const string SQL_UPDATE_CLOSED_ORDERS = "UPDATE orders SET ORDERSTATUS = 'completed' where ORDERSTATUS = 'closed' AND ACCOUNT_ACCOUNTID = (select accountid from account where profile_userid =?UserId)";
+ private const string SQL_SELECT_ORDERS_BY_ID = " o.ORDERID, o.ORDERTYPE, o.ORDERSTATUS, o.OPENDATE, o.COMPLETIONDATE, o.QUANTITY, o.PRICE, o.ORDERFEE, o.QUOTE_SYMBOL from orders o where o.account_accountid = (select a.accountid from account a where a.profile_userid = ?UserId) ORDER BY o.ORDERID DESC";
+ private const string SQL_INSERT_ACCOUNTPROFILE = "INSERT INTO accountprofile VALUES (?Address, ?Password, ?UserId, ?Email, ?CreditCard, ?FullName)";
+ private const string SQL_INSERT_ACCOUNT = "INSERT INTO account (CREATIONDATE, OPENBALANCE, LOGOUTCOUNT, BALANCE, LASTLOGIN, LOGINCOUNT, PROFILE_USERID) VALUES (NOW(), ?OpenBalance, ?LogoutCount, ?Balance, ?LastLogin, ?LoginCount, ?UserId); SELECT LAST_INSERT_ID()";
+ private const string SQL_DEBIT_ACCOUNT = "UPDATE ACCOUNT SET BALANCE=(BALANCE-?Debit) WHERE ACCOUNTID=?AccountId";
+
+ //Parameters
+ private const string PARM_USERID = "?UserId";
+ private const string PARM_HOLDINGID = "?holdingId";
+ private const string PARM_ORDERID = "?OrderId";
+ private const string PARM_ACCOUNTID = "?accountId";
+ private const string PARM_PASSWORD = "?Password";
+ private const string PARM_FULLNAME = "?FullName";
+ private const string PARM_ADDRESS = "?Address";
+ private const string PARM_EMAIL = "?Email";
+ private const string PARM_CREDITCARD = "?CreditCard";
+ private const string PARM_OPENBALANCE = "?OpenBalance";
+ private const string PARM_LOGOUTCOUNT = "?LogoutCount";
+ private const string PARM_BALANCE = "?Balance";
+ private const string PARM_LASTLOGIN = "?LastLogin";
+ private const string PARM_LOGINCOUNT = "?LoginCount";
+ private const string PARM_TOPORDERS = "?TopOrders";
+ private const string PARM_DEBIT = "?Debit";
+
+
+ public List<OrderDataModel> getOrders(string userID, bool top, int maxTop, int maxDefault)
+ {
+
+ //Here you can configure between two settings: top default to display
+ //is MAX_DISPLAY_ORDERS; the upper limit is MAX_DISPLAY_TOP_ORDERS.
+ //Set these in Web.Config/Trade.BusinessServiceHost.exe.config; and those will be the toggle
+ //choices for the user in the Account.aspx page.
+ try
+ {
+ string commandText;
+ if (top)
+ {
+ commandText = "Select " + SQL_SELECT_ORDERS_BY_ID + " LIMIT 0," + maxTop.ToString();
+ }
+ else
+ {
+ commandText = "Select " + SQL_SELECT_ORDERS_BY_ID + " LIMIT 0," + maxDefault.ToString();
+ }
+ MySqlParameter accountidparm = new MySqlParameter(PARM_USERID, MySqlDbType.VarChar, 20);
+ accountidparm.Value = userID;
+ MySqlDataReader rdr = MySQLHelper.ExecuteReaderSingleParm(_internalConnection, _internalADOTransaction, CommandType.Text, commandText, accountidparm);
+ List<OrderDataModel> orders = new List<OrderDataModel>();
+ while (rdr.Read())
+ {
+ int orderid = rdr.GetInt32(0);
+ DateTime openDate = (DateTime)rdr.GetDateTime(3);
+ Object completionDate = null;
+ //can be null
+ try
+ {
+ if (!Convert.IsDBNull(rdr.GetDateTime(4)))
+ completionDate = rdr.GetDateTime(4);
+ else
+ completionDate = DateTime.MinValue;
+ }
+ catch (Exception e)
+ {
+ string message = e.Message;
+ completionDate = DateTime.MinValue;
+ }
+ OrderDataModel order = new OrderDataModel(orderid, rdr.GetString(1), rdr.GetString(2), openDate, (DateTime)completionDate, rdr.GetDouble(5), rdr.GetDecimal(6), rdr.GetDecimal(7), rdr.GetString(8));
+ orders.Add(order);
+ }
+ rdr.Close();
+ return orders;
+ }
+ catch
+ {
+ throw;
+ }
+ }
+
+ public AccountDataModel login(string userid, string password)
+ {
+ try
+ {
+ MySqlParameter parm1 = new MySqlParameter(PARM_USERID, MySqlDbType.VarChar, 20);
+ parm1.Value = userid;
+ MySqlDataReader rdr = MySQLHelper.ExecuteReaderSingleRowSingleParm(_internalConnection, _internalADOTransaction, CommandType.Text, SQL_SELECT_CUSTOMERPROFILE_BYUSERID, parm1);
+ if (rdr.Read())
+ {
+ string userPassword = rdr.GetString(1);
+ rdr.Close();
+ if (userPassword.Equals(password))
+ {
+ MySqlParameter profileparm1 = new MySqlParameter(PARM_USERID, MySqlDbType.VarChar, 20);
+ profileparm1.Value = userid;
+ rdr = MySQLHelper.ExecuteReaderSingleRowSingleParm(_internalConnection, _internalADOTransaction, CommandType.Text, SQL_SELECT_UPDATE_CUSTOMER_LOGIN, profileparm1);
+ rdr.Read();
+ AccountDataModel customer = new AccountDataModel(rdr.GetInt32(0), userid, rdr.GetDateTime(1), rdr.GetDecimal(2), rdr.GetInt32(3), rdr.GetDecimal(4), rdr.GetDateTime(5), rdr.GetInt32(6) + 1);
+ rdr.Close();
+ return customer;
+ }
+ rdr.Close();
+ }
+ return null;
+ }
+ catch
+ {
+ throw;
+ }
+ }
+
+ public AccountProfileDataModel getAccountProfileData(string userid)
+ {
+ try
+ {
+ MySqlParameter parm1 = new MySqlParameter(PARM_USERID, MySqlDbType.VarChar, 20);
+ parm1.Value = userid;
+ MySqlDataReader rdr = MySQLHelper.ExecuteReaderSingleRowSingleParm(_internalConnection, _internalADOTransaction, CommandType.Text, SQL_SELECT_CUSTOMERPROFILE_BYUSERID, parm1);
+ if (rdr.Read())
+ {
+ AccountProfileDataModel customerprofile = new AccountProfileDataModel(rdr.GetString(0), rdr.GetString(1), rdr.GetString(2), rdr.GetString(3), rdr.GetString(4), rdr.GetString(5));
+ rdr.Close();
+ return customerprofile;
+ }
+ rdr.Close();
+ return null;
+ }
+ catch
+ {
+ throw;
+ }
+ }
+
+ public void logOutUser(string userID)
+ {
+ try
+ {
+ MySqlParameter parm1 = new MySqlParameter(PARM_USERID, MySqlDbType.VarChar, 20);
+ parm1.Value = userID;
+ MySQLHelper.ExecuteNonQuery(_internalConnection, _internalADOTransaction, CommandType.Text, SQL_UPDATE_LOGOUT, parm1);
+ return;
+ }
+ catch
+ {
+ throw;
+ }
+ }
+
+ public AccountDataModel getCustomerByUserID(string userID)
+ {
+ try
+ {
+ MySqlParameter parm1 = new MySqlParameter(PARM_USERID, MySqlDbType.VarChar, 20);
+ parm1.Value = userID;
+ MySqlDataReader rdr = MySQLHelper.ExecuteReaderSingleRowSingleParm(_internalConnection, _internalADOTransaction, CommandType.Text, SQL_SELECT_GET_CUSTOMER_BYUSERID, parm1);
+ if (rdr.Read())
+ {
+ AccountDataModel customer = new AccountDataModel(rdr.GetInt32(0), rdr.GetString(1), rdr.GetDateTime(2), rdr.GetDecimal(3), rdr.GetInt32(4), rdr.GetDecimal(5), rdr.GetDateTime(6), rdr.GetInt32(7));
+ rdr.Close();
+ return customer;
+ }
+ rdr.Close();
+ return null;
+ }
+ catch
+ {
+ throw;
+ }
+ }
+
+ public List<OrderDataModel> getClosedOrders(string userId)
+ {
+ try
+ {
+ MySqlParameter useridparm = new MySqlParameter(PARM_USERID, MySqlDbType.VarChar, 20);
+ useridparm.Value = userId;
+ MySqlDataReader rdr = MySQLHelper.ExecuteReaderSingleParm(_internalConnection, _internalADOTransaction, CommandType.Text, SQL_SELECT_CLOSED_ORDERS, useridparm);
+ List<OrderDataModel> closedorders = new List<OrderDataModel>();
+ DateTime completionDate = DateTime.MinValue;
+ while (rdr.Read())
+ {
+ int orderid = rdr.GetInt32(0);
+ DateTime openDate = (DateTime)rdr.GetDateTime(4);
+ try
+ {
+ completionDate = (DateTime)rdr.GetDateTime(3);
+ }
+ catch (Exception e) { if (e.Message.Equals("Data is Null. This method or property cannot be called on Null values.")) completionDate = DateTime.MinValue; }
+ OrderDataModel order = new OrderDataModel(orderid, rdr.GetString(1), rdr.GetString(2), openDate, completionDate, rdr.GetDouble(5), rdr.GetDecimal(6), rdr.GetDecimal(7), rdr.GetString(8));
+ order.orderStatus = StockTraderUtility.ORDER_STATUS_COMPLETED;
+ closedorders.Add(order);
+ }
+ if (rdr.HasRows)
+ {
+ rdr.Close();
+ useridparm = new MySqlParameter(PARM_USERID, MySqlDbType.VarChar, 20);
+ useridparm.Value = userId;
+ MySQLHelper.ExecuteNonQuerySingleParm(_internalConnection, _internalADOTransaction, CommandType.Text, SQL_UPDATE_CLOSED_ORDERS, useridparm);
+ }
+ else
+ rdr.Close();
+ return closedorders;
+ }
+ catch
+ {
+ throw;
+ }
+ }
+
+ public List<HoldingDataModel> getHoldings(string userID)
+ {
+ try
+ {
+ MySqlParameter useridparm = new MySqlParameter(PARM_USERID, MySqlDbType.VarChar, 20);
+ useridparm.Value = userID;
+ MySqlDataReader rdr = MySQLHelper.ExecuteReaderSingleParm(_internalConnection, _internalADOTransaction, CommandType.Text, SQL_SELECT_HOLDINGS, useridparm);
+ List<HoldingDataModel> holdings = new List<HoldingDataModel>();
+ while (rdr.Read())
+ {
+ HoldingDataModel holding = new HoldingDataModel(rdr.GetInt32(0), rdr.GetDouble(1), rdr.GetDecimal(2), rdr.GetDateTime(3), rdr.GetString(4), rdr.GetInt32(5));
+ holdings.Add(holding);
+ }
+ rdr.Close();
+ return holdings;
+ }
+ catch
+ {
+ throw;
+ }
+ }
+
+ public HoldingDataModel getHoldingForUpdate(int orderID)
+ {
+ try
+ {
+ MySqlParameter orderIDparm = new MySqlParameter(PARM_ORDERID, MySqlDbType.Int32);
+ orderIDparm.Value = orderID;
+ MySqlDataReader rdr = MySQLHelper.ExecuteReaderSingleRowSingleParm(_internalConnection, _internalADOTransaction, CommandType.Text, SQL_SELECT_HOLDING_LOCK, orderIDparm);
+ while (rdr.Read())
+ {
+ HoldingDataModel holding = new HoldingDataModel(rdr.GetInt32(0), rdr.GetInt32(1), rdr.GetDouble(2), rdr.GetDecimal(3), rdr.GetDateTime(4), rdr.GetString(5));
+ rdr.Close();
+ return holding;
+ }
+ return null;
+ }
+ catch
+ {
+ throw;
+ }
+ }
+
+ public HoldingDataModel getHolding(string userid, int holdingid)
+ {
+ try
+ {
+ MySqlParameter[] holdingidparms = new MySqlParameter[]{new MySqlParameter(PARM_HOLDINGID, MySqlDbType.Int32),
+ new MySqlParameter(PARM_USERID, MySqlDbType.VarChar, 20)};
+ holdingidparms[0].Value = holdingid;
+ holdingidparms[1].Value = userid;
+ MySqlDataReader rdr = MySQLHelper.ExecuteReaderSingleRow(_internalConnection, _internalADOTransaction, CommandType.Text, SQL_SELECT_HOLDING_NOLOCK, holdingidparms);
+ while (rdr.Read())
+ {
+ HoldingDataModel holding = new HoldingDataModel(holdingid, rdr.GetInt32(0), rdr.GetDouble(1), rdr.GetDecimal(2), rdr.GetDateTime(3), rdr.GetString(4));
+ rdr.Close();
+ return holding;
+ }
+ return null;
+ }
+ catch
+ {
+ throw;
+ }
+ }
+
+ public void updateAccountBalance(int accountID, decimal total)
+ {
+ try
+ {
+ // Get the parameters from the cache
+ MySqlParameter[] accountParms = GetUpdateAccountBalanceParameters();
+ accountParms[0].Value = total;
+ accountParms[1].Value = accountID;
+ MySQLHelper.ExecuteNonQuery(_internalConnection, _internalADOTransaction, CommandType.Text, SQL_DEBIT_ACCOUNT, accountParms);
+ }
+ catch
+ {
+ throw;
+ }
+ return;
+ }
+
+ public void insertAccount(AccountDataModel customer)
+ {
+ // Get the parameters from the cache
+ MySqlParameter[] AccountParms = GetCreateAccountParameters();
+ try
+ {
+ AccountParms[0].Value = customer.openBalance;
+ AccountParms[1].Value = customer.logoutCount;
+ AccountParms[2].Value = customer.balance;
+ AccountParms[3].Value = customer.lastLogin;
+ AccountParms[4].Value = customer.loginCount;
+ AccountParms[5].Value = customer.profileID;
+ customer.accountID = Convert.ToInt32(MySQLHelper.ExecuteScalar(_internalConnection, _internalADOTransaction, CommandType.Text, SQL_INSERT_ACCOUNT, AccountParms));
+ return;
+ }
+ catch
+ {
+ throw;
+ }
+ }
+
+ public void insertAccountProfile(AccountProfileDataModel customerprofile)
+ {
+ // Get the paramters from the cache
+ MySqlParameter[] ProfileParms = GetCreateAccountProfileParameters();
+ try
+ {
+ ProfileParms[0].Value = customerprofile.address;
+ ProfileParms[1].Value = customerprofile.password;
+ ProfileParms[2].Value = customerprofile.userID;
+ ProfileParms[3].Value = customerprofile.email;
+ ProfileParms[4].Value = customerprofile.creditCard;
+ ProfileParms[5].Value = customerprofile.fullName;
+ MySQLHelper.ExecuteNonQuery(_internalConnection, _internalADOTransaction, CommandType.Text, SQL_INSERT_ACCOUNTPROFILE, ProfileParms);
+ }
+ catch
+ {
+ throw;
+ }
+ }
+
+ public AccountProfileDataModel update(AccountProfileDataModel customerprofile)
+ {
+ try
+ {
+ // Get the paramters from the cache
+ MySqlParameter[] ProfileParms = GetUpdateAccountProfileParameters();
+ ProfileParms[0].Value = customerprofile.address;
+ ProfileParms[1].Value = customerprofile.password;
+ ProfileParms[2].Value = customerprofile.email;
+ ProfileParms[3].Value = customerprofile.creditCard;
+ ProfileParms[4].Value = customerprofile.fullName;
+ ProfileParms[5].Value = customerprofile.userID;
+ MySQLHelper.ExecuteNonQuery(_internalConnection, _internalADOTransaction, CommandType.Text, SQL_UPDATE_ACCOUNTPROFILE, ProfileParms);
+ return customerprofile;
+ }
+ catch
+ {
+ throw;
+ }
+ }
+
+ private static MySqlParameter[] GetUpdateAccountBalanceParameters()
+ {
+ // Get the paramters from the cache
+ MySqlParameter[] parms = MySQLHelper.GetCacheParameters(SQL_DEBIT_ACCOUNT);
+ // If the cache is empty, rebuild the parameters
+ if (parms == null)
+ {
+ parms = new MySqlParameter[] {new MySqlParameter(PARM_DEBIT, MySqlDbType.Decimal, 14),
+ new MySqlParameter(PARM_ACCOUNTID, MySqlDbType.Int32)};
+ // Add the parameters to the cached
+ MySQLHelper.CacheParameters(SQL_DEBIT_ACCOUNT, parms);
+ }
+ return parms;
+ }
+
+ private static MySqlParameter[] GetCreateAccountProfileParameters()
+ {
+ // Get the parameters from the cache
+ MySqlParameter[] parms = MySQLHelper.GetCacheParameters(SQL_INSERT_ACCOUNTPROFILE);
+ // If the cache is empty, rebuild the parameters
+ if (parms == null)
+ {
+ parms = new MySqlParameter[] {
+ new MySqlParameter(PARM_ADDRESS, MySqlDbType.VarChar, StockTraderUtility.ADDRESS_MAX_LENGTH),
+ new MySqlParameter(PARM_PASSWORD, MySqlDbType.VarChar, StockTraderUtility.PASSWORD_MAX_LENGTH),
+ new MySqlParameter(PARM_USERID, MySqlDbType.VarChar, StockTraderUtility.USERID_MAX_LENGTH),
+ new MySqlParameter(PARM_EMAIL, MySqlDbType.VarChar, StockTraderUtility.EMAIL_MAX_LENGTH),
+ new MySqlParameter(PARM_CREDITCARD, MySqlDbType.VarChar, StockTraderUtility.CREDITCARD_MAX_LENGTH),
+ new MySqlParameter(PARM_FULLNAME, MySqlDbType.VarChar, StockTraderUtility.FULLNAME_MAX_LENGTH)};
+
+ // Add the parametes to the cached
+ MySQLHelper.CacheParameters(SQL_INSERT_ACCOUNTPROFILE, parms);
+ }
+ return parms;
+ }
+
+ private static MySqlParameter[] GetUpdateAccountProfileParameters()
+ {
+ // Get the parameters from the cache
+ MySqlParameter[] parms = MySQLHelper.GetCacheParameters(SQL_UPDATE_ACCOUNTPROFILE);
+ // If the cache is empty, rebuild the parameters
+ if (parms == null)
+ {
+ parms = new MySqlParameter[] {
+ new MySqlParameter(PARM_ADDRESS, MySqlDbType.VarChar, StockTraderUtility.ADDRESS_MAX_LENGTH),
+ new MySqlParameter(PARM_PASSWORD, MySqlDbType.VarChar, StockTraderUtility.PASSWORD_MAX_LENGTH),
+ new MySqlParameter(PARM_EMAIL, MySqlDbType.VarChar, StockTraderUtility.EMAIL_MAX_LENGTH),
+ new MySqlParameter(PARM_CREDITCARD, MySqlDbType.VarChar, StockTraderUtility.CREDITCARD_MAX_LENGTH),
+ new MySqlParameter(PARM_FULLNAME, MySqlDbType.VarChar, StockTraderUtility.FULLNAME_MAX_LENGTH),
+ new MySqlParameter(PARM_USERID, MySqlDbType.VarChar, StockTraderUtility.USERID_MAX_LENGTH)};
+
+ // Add the parametes to the cached
+ MySQLHelper.CacheParameters(SQL_UPDATE_ACCOUNTPROFILE, parms);
+ }
+ return parms;
+ }
+
+ private static MySqlParameter[] GetCreateAccountParameters()
+ {
+ // Get the parameters from the cache
+ MySqlParameter[] parms = MySQLHelper.GetCacheParameters(SQL_INSERT_ACCOUNT);
+ // If the cache is empty, rebuild the parameters
+ if (parms == null)
+ {
+ parms = new MySqlParameter[] {
+ new MySqlParameter(PARM_OPENBALANCE, MySqlDbType.Decimal),
+ new MySqlParameter(PARM_LOGOUTCOUNT, MySqlDbType.Int32),
+ new MySqlParameter(PARM_BALANCE, MySqlDbType.Decimal),
+ new MySqlParameter(PARM_LASTLOGIN, MySqlDbType.DateTime),
+ new MySqlParameter(PARM_LOGINCOUNT, MySqlDbType.Int32),
+ new MySqlParameter(PARM_USERID, MySqlDbType.VarChar, StockTraderUtility.USERID_MAX_LENGTH)};
+
+ // Add the parameters to the cached
+ MySQLHelper.CacheParameters(SQL_INSERT_ACCOUNT, parms);
+ }
+ return parms;
+ }
+
+ }
+}
Added: incubator/stonehenge/trunk/stocktrader/dotnet/common/StockTraderDALMySQL/MarketSummary.cs
URL: http://svn.apache.org/viewvc/incubator/stonehenge/trunk/stocktrader/dotnet/common/StockTraderDALMySQL/MarketSummary.cs?rev=817792&view=auto
==============================================================================
--- incubator/stonehenge/trunk/stocktrader/dotnet/common/StockTraderDALMySQL/MarketSummary.cs (added)
+++ incubator/stonehenge/trunk/stocktrader/dotnet/common/StockTraderDALMySQL/MarketSummary.cs Tue Sep 22 19:34:18 2009
@@ -0,0 +1,258 @@
+//
+// 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.Text;
+using System.Data;
+using MySql.Data.MySqlClient;
+using MySql.Data;
+using MySql.Data.Types;
+using Trade.IDAL;
+using Trade.Utility;
+using Trade.ConfigServiceDataContract;
+using Trade.BusinessServiceDataContract;
+
+namespace Trade.DALMySQL
+{
+ public class MarketSummary : IMarketSummary
+ {
+
+ public MarketSummary()
+ {
+ }
+
+ //Constructor for internal DAL-DAL calls to use an existing DB connection.
+ public MarketSummary(MySqlConnection conn, MySqlTransaction trans)
+ {
+ _internalConnection = conn;
+ _internalADOTransaction = trans;
+ }
+
+ //_internalConnection: Used by a DAL instance such that a DAL instance,
+ //associated with a BSL instance, will work off a single connection between BSL calls.
+ private MySqlConnection _internalConnection;
+
+ //Used only when doing ADO.NET transactions.
+ //This will be completely ignored when null, and not attached to a cmd object
+ //In MySQLHelper unless it has been initialized explicitly in the BSL with a
+ //dal.BeginADOTransaction(). See app config setting in web.config and
+ //Trade.BusinessServiceHost.exe.config "Use System.Transactions Globally" which determines
+ //whether user wants to run with ADO transactions or System.Transactions. The DAL itself
+ //is built to be completely agnostic and will work with either.
+ private MySqlTransaction _internalADOTransaction;
+
+ //Used only when doing ADO.NET transactions.
+ public void BeginADOTransaction()
+ {
+ _internalADOTransaction = _internalConnection.BeginTransaction(System.Data.IsolationLevel.ReadCommitted);
+ }
+
+ //Used only when doing ADO.NET transactions.
+ public void RollBackTransaction()
+ {
+ _internalADOTransaction.Rollback();
+ _internalADOTransaction = null;
+ }
+
+ //Used only when doing ADO.NET transactions.
+ public void CommitADOTransaction()
+ {
+ _internalADOTransaction.Commit();
+ _internalADOTransaction = null;
+ }
+
+ public void Open(string connString)
+ {
+ if (_internalConnection == null)
+ _internalConnection = new MySqlConnection(connString);
+ if (_internalConnection.State != ConnectionState.Open)
+ _internalConnection.Open();
+ }
+
+ public void Close()
+ {
+ if (_internalConnection != null && _internalConnection.State != ConnectionState.Closed)
+ _internalConnection.Close();
+ }
+
+ private const string MySQL_SELECT_MARKETSUMMARY_GAINERS = "SELECT symbol, companyname, volume, price, open1, low, high, change1 from quote where symbol like 's:%' order by change1 desc";
+ private const string MySQL_SELECT_MARKETSUMMARY_LOSERS = "SELECT symbol, companyname, volume, price, open1, low, high, change1 from quote where symbol like 's:%' order by change1";
+ private const string MySQL_SELECT_MARKETSUMMARY_TSIA = "select SUM(price)/count(*) as TSIA from quote where symbol like 's:%'";
+ private const string MySQL_SELECT_MARKETSUMMARY_OPENTSIA = "select SUM(open1)/count(*) as openTSIA from quote where symbol like 's:%'";
+ private const string MySQL_SELECT_MARKETSUMMARY_VOLUME = "SELECT SUM(volume) from quote where symbol like 's:%'";
+ private const string MySQL_SELECT_QUOTE = "SELECT symbol, companyname, volume, price, open1, low, high, change1 from quote where symbol = ?QuoteSymbol";
+ private const string MySQL_SELECT_QUOTE_NOLOCK = "SELECT symbol, companyname, volume, price, open1, low, high, change1 from quote where symbol = ?QuoteSymbol";
+ private const string MySQL_UPDATE_STOCKPRICEVOLUME = "UPDATE QUOTE SET PRICE=?Price, Low=?Low, High=?High, Change1 = ?Price - open1, VOLUME=VOLUME+?Quantity WHERE SYMBOL=?QuoteSymbol";
+
+ //Parameters
+ private const string PARM_SYMBOL = "?QuoteSymbol";
+ private const string PARM_PRICE = "?Price";
+ private const string PARM_LOW = "?Low";
+ private const string PARM_HIGH = "?High";
+ private const string PARM_QUANTITY = "?Quantity";
+
+ public void updateStockPriceVolume(double Quantity, QuoteDataModel quote)
+ {
+ try
+ {
+ MySqlParameter[] updatestockpriceparm = GetUpdateStockPriceVolumeParameters();
+ decimal priceChangeFactor = StockTraderUtility.getRandomPriceChangeFactor(quote.price);
+ decimal newprice = quote.price * priceChangeFactor;
+ if (newprice < quote.low)
+ quote.low = newprice;
+ if (newprice > quote.high)
+ quote.high = newprice;
+ updatestockpriceparm[0].Value = (decimal)newprice;
+ updatestockpriceparm[1].Value = (float)Quantity;
+ updatestockpriceparm[2].Value = quote.symbol;
+ updatestockpriceparm[3].Value = quote.low;
+ updatestockpriceparm[4].Value = quote.high;
+
+ MySQLHelper.ExecuteNonQuery(_internalConnection, _internalADOTransaction, CommandType.Text, MySQL_UPDATE_STOCKPRICEVOLUME, updatestockpriceparm);
+ return;
+ }
+ catch
+ {
+ throw;
+ }
+ }
+
+ public QuoteDataModel getQuote(string symbol)
+ {
+ try
+ {
+ MySqlParameter parm1 = new MySqlParameter(PARM_SYMBOL, MySqlDbType.VarChar, 10);
+ parm1.Value = symbol;
+ MySqlDataReader rdr = MySQLHelper.ExecuteReaderSingleRowSingleParm(_internalConnection, _internalADOTransaction, CommandType.Text, MySQL_SELECT_QUOTE_NOLOCK, parm1);
+ QuoteDataModel quote = null;
+ if (rdr.HasRows)
+ {
+ rdr.Read();
+ quote = new QuoteDataModel(rdr.GetString(0), rdr.GetString(1), rdr.GetDouble(2), rdr.GetDecimal(3), rdr.GetDecimal(4), rdr.GetDecimal(5), rdr.GetDecimal(6), rdr.GetDouble(7));
+ }
+ rdr.Close();
+ return quote;
+ }
+ catch
+ {
+ throw;
+ }
+ }
+
+ public QuoteDataModel getQuoteForUpdate(string symbol)
+ {
+ try
+ {
+ MySqlParameter parm1 = new MySqlParameter(PARM_SYMBOL, MySqlDbType.VarChar, 10);
+ parm1.Value = symbol;
+ MySqlDataReader rdr = MySQLHelper.ExecuteReaderSingleRowSingleParm(_internalConnection, _internalADOTransaction, CommandType.Text, MySQL_SELECT_QUOTE, parm1);
+ QuoteDataModel quote = null;
+ if (rdr.HasRows)
+ {
+ rdr.Read();
+ quote = new QuoteDataModel(rdr.GetString(0), rdr.GetString(1), rdr.GetDouble(2), rdr.GetDecimal(3), rdr.GetDecimal(4), rdr.GetDecimal(5), rdr.GetDecimal(6), rdr.GetDouble(7));
+ }
+ rdr.Close();
+ return quote;
+ }
+ catch
+ {
+ throw;
+ }
+ }
+
+ public MarketSummaryDataModelWS getMarketSummaryData()
+ {
+ try
+ {
+ decimal TSIA = (decimal)MySQLHelper.ExecuteScalarNoParm(_internalConnection, _internalADOTransaction, CommandType.Text, MySQL_SELECT_MARKETSUMMARY_TSIA);
+ decimal openTSIA = (decimal)MySQLHelper.ExecuteScalarNoParm(_internalConnection, _internalADOTransaction, CommandType.Text, MySQL_SELECT_MARKETSUMMARY_OPENTSIA);
+ double totalVolume = (double)MySQLHelper.ExecuteScalarNoParm(_internalConnection, _internalADOTransaction, CommandType.Text, MySQL_SELECT_MARKETSUMMARY_VOLUME);
+ MySqlDataReader rdr = MySQLHelper.ExecuteReaderNoParm(_internalConnection, _internalADOTransaction, CommandType.Text, MySQL_SELECT_MARKETSUMMARY_GAINERS);
+ List<QuoteDataModel> topgainers = new List<QuoteDataModel>();
+ List<QuoteDataModel> toplosers = new List<QuoteDataModel>();
+ int i = 0;
+ while (rdr.Read() && i++ < 5)
+ {
+ QuoteDataModel quote = new QuoteDataModel(rdr.GetString(0), rdr.GetString(1), rdr.GetDouble(2), rdr.GetDecimal(3), rdr.GetDecimal(4), rdr.GetDecimal(5), rdr.GetDecimal(6), rdr.GetDouble(7));
+ topgainers.Add(quote);
+ }
+ rdr.Close();
+ rdr = MySQLHelper.ExecuteReaderNoParm(_internalConnection, _internalADOTransaction, CommandType.Text, MySQL_SELECT_MARKETSUMMARY_LOSERS);
+ i = 0;
+ while (rdr.Read() && i++ < 5)
+ {
+ QuoteDataModel quote = new QuoteDataModel(rdr.GetString(0), rdr.GetString(1), rdr.GetDouble(2), rdr.GetDecimal(3), rdr.GetDecimal(4), rdr.GetDecimal(5), rdr.GetDecimal(6), rdr.GetDouble(7));
+ toplosers.Add(quote);
+ }
+ rdr.Close();
+ MarketSummaryDataModelWS marketSummaryData = new MarketSummaryDataModelWS(TSIA, openTSIA, totalVolume, topgainers, toplosers);
+ return marketSummaryData;
+ }
+ catch
+ {
+ throw;
+ }
+ }
+
+ private static MySqlParameter[] GetUpdateStockPriceVolumeParameters()
+ {
+ // Get the paramters from the cache
+ MySqlParameter[] parms = MySQLHelper.GetCacheParameters(MySQL_UPDATE_STOCKPRICEVOLUME);
+ // If the cache is empty, rebuild the parameters
+ if (parms == null)
+ {
+ parms = new MySqlParameter[] {
+ new MySqlParameter(PARM_PRICE, MySqlDbType.Decimal, 14),
+ new MySqlParameter(PARM_QUANTITY, MySqlDbType.Float),
+ new MySqlParameter(PARM_SYMBOL, MySqlDbType.VarChar, 10),
+ new MySqlParameter(PARM_LOW, MySqlDbType.Decimal, 14),
+ new MySqlParameter(PARM_HIGH, MySqlDbType.Decimal, 14)};
+ // Add the parametes to the cached
+ MySQLHelper.CacheParameters(MySQL_UPDATE_STOCKPRICEVOLUME, parms);
+ }
+ return parms;
+ }
+
+ }
+}
Added: incubator/stonehenge/trunk/stocktrader/dotnet/common/StockTraderDALMySQL/MySQLHelper.cs
URL: http://svn.apache.org/viewvc/incubator/stonehenge/trunk/stocktrader/dotnet/common/StockTraderDALMySQL/MySQLHelper.cs?rev=817792&view=auto
==============================================================================
--- incubator/stonehenge/trunk/stocktrader/dotnet/common/StockTraderDALMySQL/MySQLHelper.cs (added)
+++ incubator/stonehenge/trunk/stocktrader/dotnet/common/StockTraderDALMySQL/MySQLHelper.cs Tue Sep 22 19:34:18 2009
@@ -0,0 +1,246 @@
+//
+// 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.DALMySQL
+{
+ 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);
+ }
+ }
+ }
+
+ }
+
+}
Added: incubator/stonehenge/trunk/stocktrader/dotnet/common/StockTraderDALMySQL/Order.cs
URL: http://svn.apache.org/viewvc/incubator/stonehenge/trunk/stocktrader/dotnet/common/StockTraderDALMySQL/Order.cs?rev=817792&view=auto
==============================================================================
--- incubator/stonehenge/trunk/stocktrader/dotnet/common/StockTraderDALMySQL/Order.cs (added)
+++ incubator/stonehenge/trunk/stocktrader/dotnet/common/StockTraderDALMySQL/Order.cs Tue Sep 22 19:34:18 2009
@@ -0,0 +1,442 @@
+//
+// 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.Text;
+using System.Data;
+using MySql.Data.MySqlClient;
+using MySql.Data;
+using MySql.Data.Types;
+using Trade.IDAL;
+using Trade.Utility;
+using Trade.ConfigServiceDataContract;
+using Trade.BusinessServiceDataContract;
+
+namespace Trade.DALMySQL
+{
+ public class Order : IOrder //
+// 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
+//======================================================================================================
+
+
+ {
+ public Order()
+ {
+ }
+
+ //Constructor for internal DAL-DAL calls to use an existing DB connection.
+ public Order(MySqlConnection conn)
+ {
+ _internalConnection = conn;
+ }
+
+ //_internalConnection: Used by a DAL instance such that a DAL instance,
+ //associated with a BSL instance, will work off a single connection between BSL calls.
+ private MySqlConnection _internalConnection;
+
+ //_internalADOTransaction: Used only when doing ADO.NET transactions.
+ //This will be completely ignored when null, and not attached to a cmd object
+ //In MySQLHelper unless it has been initialized explicitly in the BSL with a
+ //dal.BeginADOTransaction(). See app config setting in web.config and
+ //Trade.BusinessServiceHost.exe.config "Use System.Transactions Globally" which determines
+ //whether user wants to run with ADO transactions or System.Transactions. The DAL itself
+ //is built to be completely agnostic and will work with either.
+ private MySqlTransaction _internalADOTransaction;
+
+ //Used only when doing ADO.NET transactions.
+ public void BeginADOTransaction()
+ {
+ if (_internalConnection.State != ConnectionState.Open)
+ _internalConnection.Open();
+ _internalADOTransaction = _internalConnection.BeginTransaction(System.Data.IsolationLevel.ReadCommitted);
+ }
+
+ //Used only when explicitly using ADO.NET transactions from the BSL.
+ public void RollBackTransaction()
+ {
+ _internalADOTransaction.Rollback();
+ _internalADOTransaction = null;
+ }
+
+ //Used only when explicitly using ADO.NET transactions from the BSL.
+ public void CommitADOTransaction()
+ {
+ _internalADOTransaction.Commit();
+ _internalADOTransaction = null;
+ }
+
+ public void Open(string connString)
+ {
+ if (_internalConnection == null)
+ _internalConnection = new MySqlConnection(connString);
+ if (_internalConnection.State != ConnectionState.Open)
+ _internalConnection.Open();
+ }
+
+ public void Close()
+ {
+ if (_internalConnection != null && _internalConnection.State != ConnectionState.Closed)
+ _internalConnection.Close();
+ }
+
+ private const string MySQL_INSERT_ORDER = "INSERT INTO ORDERS (OPENDATE, ORDERFEE, PRICE, QUOTE_SYMBOL, QUANTITY, ORDERTYPE, ORDERSTATUS, ACCOUNT_ACCOUNTID, HOLDING_HOLDINGID) VALUES (NOW(), ?OrderFee, ?Price, ?QuoteSymbol, ?Quantity, ?OrderType, 'open', ?accountId, ?HoldingId); SELECT LAST_INSERT_ID()";
+ private const string MySQL_GET_ACCOUNTID = "SELECT ACCOUNTID FROM ACCOUNT WHERE PROFILE_USERID = ?userId";
+ private const string MySQL_GET_ACCOUNTID_ORDER = "SELECT ACCOUNT_ACCOUNTID FROM ORDERS WHERE ORDERID=?OrderId";
+ private const string MySQL_INSERT_HOLDING = "INSERT INTO HOLDING (PURCHASEPRICE, QUANTITY, PURCHASEDATE, ACCOUNT_ACCOUNTID, QUOTE_SYMBOL) VALUES (?PurchasePrice, ?Quantity, ?PurchaseDate, ?AccountId, ?QuoteSymbol); SELECT LAST_INSERT_ID()";
+ private const string MySQL_SELECT_HOLDING = "SELECT HOLDING.HOLDINGID, HOLDING.QUANTITY, HOLDING.PURCHASEPRICE, HOLDING.PURCHASEDATE, HOLDING.QUOTE_SYMBOL,HOLDING.ACCOUNT_ACCOUNTID FROM HOLDING WHERE HOLDINGID= ?HoldingId";
+ private const string MySQL_DELETE_HOLDING = "DELETE FROM HOLDING WHERE HOLDINGID=?HoldingId";
+ private const string MySQL_GET_HOLDING_QUANTITY = "SELECT QUANTITY FROM HOLDING WHERE HOLDINGID=?HoldingId";
+ private const string MySQL_UPDATE_HOLDING = "UPDATE HOLDING SET QUANTITY=QUANTITY-?Quantity WHERE HOLDINGID=?HoldingId";
+ private const string MySQL_UPDATE_ORDER = "UPDATE ORDERS SET QUANTITY=?Quantity WHERE ORDERID=?OrderId";
+ private const string MySQL_CLOSE_ORDER = "UPDATE ORDERS SET ORDERSTATUS = ?status, COMPLETIONDATE=NOW(), HOLDING_HOLDINGID=?HoldingId, PRICE=?Price WHERE ORDERID = ?OrderId";
+
+ //Parameters
+ private const string PARM_SYMBOL = "?QuoteSymbol";
+ private const string PARM_USERID = "?userId";
+ private const string PARM_ORDERSTATUS = "?status";
+ private const string PARM_QUANTITY = "?Quantity";
+ private const string PARM_ORDERTYPE = "?OrderType";
+ private const string PARM_ACCOUNTID = "?accountId";
+ private const string PARM_ORDERID = "?OrderId";
+ private const string PARM_HOLDINGID = "?HoldingId";
+ private const string PARM_ORDERFEE = "?OrderFee";
+ private const string PARM_PRICE = "?Price";
+ private const string PARM_PURCHASEPRICE = "?PurchasePrice";
+ private const string PARM_PURCHASEDATE = "?PurchaseDate";
+
+ public QuoteDataModel getQuoteForUpdate(string symbol)
+ {
+ //Cross-DAL calls pass in their own connection if they want to ensure commans are
+ //executed on the same connection and optional ADO transaction. If
+ //_internalADOTransaction is null, as with all DAL classes, it will be ignored.
+ MarketSummary marketsummaryDal = new MarketSummary(_internalConnection, _internalADOTransaction);
+ return marketsummaryDal.getQuoteForUpdate(symbol);
+ }
+
+ public void updateStockPriceVolume(double quantity, QuoteDataModel quote)
+ {
+ //See note above: want to use existing connection
+ MarketSummary marketSummaryDal = new MarketSummary(_internalConnection, _internalADOTransaction);
+ marketSummaryDal.updateStockPriceVolume(quantity, quote);
+ return;
+ }
+
+ public HoldingDataModel getHoldingForUpdate(int orderID)
+ {
+ //See note above: want to use existing connection
+ Customer customerDal = new Customer(_internalConnection, _internalADOTransaction);
+ return customerDal.getHoldingForUpdate(orderID);
+ }
+
+ public void updateAccountBalance(int accountID, decimal total)
+ {
+ //See note above: want to use existing connection
+ Customer customerDal = new Customer(_internalConnection, _internalADOTransaction);
+ customerDal.updateAccountBalance(accountID, total);
+ return;
+ }
+
+ public OrderDataModel createOrder(string userID, string symbol, string orderType, double quantity, int holdingID)
+ {
+ try
+ {
+ DateTime dt = DateTime.MinValue;
+ int orderid = 0;
+ OrderDataModel order = new OrderDataModel(orderid, orderType, StockTraderUtility.ORDER_STATUS_OPEN, DateTime.Now, DateTime.MinValue, quantity, (decimal)1, StockTraderUtility.getOrderFee(orderType), symbol);
+ order.holdingID = holdingID;
+ MySqlParameter[] parm = new MySqlParameter[] { new MySqlParameter(PARM_USERID, MySqlDbType.VarChar, 20) };
+ parm[0].Value = userID;
+ order.accountID = Convert.ToInt32(MySQLHelper.ExecuteScalar(_internalConnection, _internalADOTransaction, CommandType.Text, MySQL_GET_ACCOUNTID, parm));
+ MySqlParameter[] OrderParms = GetCreateOrderParameters();
+ OrderParms[0].Value = order.orderFee;
+ OrderParms[1].Value = order.price;
+ OrderParms[2].Value = order.symbol;
+ OrderParms[3].Value = (float)order.quantity;
+ OrderParms[4].Value = order.orderType;
+ OrderParms[5].Value = order.accountID;
+ OrderParms[6].Value = holdingID;
+ order.orderID = Convert.ToInt32(MySQLHelper.ExecuteScalar(_internalConnection, _internalADOTransaction, CommandType.Text, MySQL_INSERT_ORDER, OrderParms));
+ return order;
+ }
+ catch
+ {
+ throw;
+ }
+ }
+
+ public HoldingDataModel getHolding(int holdingID)
+ {
+ MySqlParameter parm1 = new MySqlParameter(PARM_HOLDINGID, MySqlDbType.Int32, 10);
+ parm1.Value = holdingID;
+ MySqlDataReader rdr = MySQLHelper.ExecuteReaderSingleRowSingleParm(_internalConnection, _internalADOTransaction, CommandType.Text, MySQL_SELECT_HOLDING, parm1);
+ if (rdr.Read())
+ {
+ HoldingDataModel holding = new HoldingDataModel(rdr.GetInt32(0), rdr.GetDouble(1), rdr.GetDecimal(2), rdr.GetDateTime(3), rdr.GetString(4), rdr.GetInt32(5));
+ rdr.Close();
+ return holding;
+ }
+ rdr.Close();
+ return null;
+ }
+
+ public int createHolding(OrderDataModel order)
+ {
+ try
+ {
+ MySqlParameter orderParm = new MySqlParameter(PARM_ORDERID, MySqlDbType.Int32, 10);
+ orderParm.Value = order.orderID;
+ order.accountID = Convert.ToInt32(MySQLHelper.ExecuteScalarSingleParm(_internalConnection, _internalADOTransaction, CommandType.Text, MySQL_GET_ACCOUNTID_ORDER, orderParm));
+ MySqlParameter[] HoldingParms = GetCreateHoldingParameters();
+ HoldingParms[0].Value = order.price;
+ HoldingParms[1].Value = (float)order.quantity;
+ HoldingParms[2].Value = order.openDate;
+ HoldingParms[3].Value = order.accountID;
+ HoldingParms[4].Value = order.symbol;
+ int holdingid = MySQLHelper.ExecuteScalar(_internalConnection, _internalADOTransaction, CommandType.Text, MySQL_INSERT_HOLDING, HoldingParms);
+ return holdingid;
+ }
+ catch
+ {
+ throw;
+ }
+ }
+
+ public void updateHolding(int holdingid, double quantity)
+ {
+ try
+ {
+ MySqlParameter[] HoldingParms2 = GetUpdateHoldingParameters();
+ HoldingParms2[0].Value = holdingid;
+ HoldingParms2[1].Value = quantity;
+ MySQLHelper.ExecuteNonQuery(_internalConnection, _internalADOTransaction, CommandType.Text, MySQL_UPDATE_HOLDING, HoldingParms2);
+ HoldingDataModel holding = new HoldingDataModel();
+ return;
+ }
+ catch
+ {
+ throw;
+ }
+ }
+
+ public void deleteHolding(int holdingid)
+ {
+ try
+ {
+ MySqlParameter[] HoldingParms2 = { new MySqlParameter(PARM_HOLDINGID, MySqlDbType.Int32) };
+ HoldingParms2[0].Value = holdingid;
+ MySQLHelper.ExecuteNonQuery(_internalConnection, _internalADOTransaction, CommandType.Text, MySQL_DELETE_HOLDING, HoldingParms2);
+ return;
+ }
+ catch
+ {
+ throw;
+ }
+ }
+
+ public void updateOrder(OrderDataModel order)
+ {
+ try
+ {
+ MySqlParameter[] orderparms = GetUpdateOrderParameters();
+ orderparms[0].Value = order.quantity;
+ orderparms[1].Value = order.orderID;
+ MySQLHelper.ExecuteNonQuery(_internalConnection, _internalADOTransaction, CommandType.Text, MySQL_UPDATE_ORDER, orderparms);
+ }
+ catch
+ {
+ throw;
+ }
+ return;
+ }
+
+ public void closeOrder(OrderDataModel order)
+ {
+ try
+ {
+ MySqlParameter[] closeorderparm = GetCloseOrdersParameters();
+ closeorderparm[0].Value = StockTraderUtility.ORDER_STATUS_CLOSED;
+ if (order.orderType.Equals(StockTraderUtility.ORDER_TYPE_SELL))
+ closeorderparm[1].Value = DBNull.Value;
+ else
+ closeorderparm[1].Value = order.holdingID;
+ closeorderparm[2].Value = order.price;
+ closeorderparm[3].Value = order.orderID;
+ MySQLHelper.ExecuteNonQuery(_internalConnection, _internalADOTransaction, CommandType.Text, MySQL_CLOSE_ORDER, closeorderparm);
+ }
+ catch
+ {
+ throw;
+ }
+ return;
+ }
+
+ private static MySqlParameter[] GetCreateOrderParameters()
+ {
+ // Get the paramters from the cache
+ MySqlParameter[] parms = MySQLHelper.GetCacheParameters(MySQL_INSERT_ORDER);
+ // If the cache is empty, rebuild the parameters
+ if (parms == null)
+ {
+ parms = new MySqlParameter[] {
+ new MySqlParameter(PARM_ORDERFEE, MySqlDbType.Decimal, 14),
+ new MySqlParameter(PARM_PRICE, MySqlDbType.Decimal, 14),
+ new MySqlParameter(PARM_SYMBOL, MySqlDbType.VarChar, 20),
+ new MySqlParameter(PARM_QUANTITY, MySqlDbType.Float),
+ new MySqlParameter(PARM_ORDERTYPE, MySqlDbType.VarChar,5),
+ new MySqlParameter(PARM_ACCOUNTID, MySqlDbType.Int32, 10),
+ new MySqlParameter(PARM_HOLDINGID, MySqlDbType.Int32,10)};
+ // Add the parametes to the cached
+ MySQLHelper.CacheParameters(MySQL_INSERT_ORDER, parms);
+ }
+ return parms;
+ }
+
+ private static MySqlParameter[] GetUpdateOrderParameters()
+ {
+ // Get the paramters from the cache
+ MySqlParameter[] parms = MySQLHelper.GetCacheParameters(MySQL_UPDATE_ORDER);
+ // If the cache is empty, rebuild the parameters
+ if (parms == null)
+ {
+ parms = new MySqlParameter[] {new MySqlParameter(PARM_QUANTITY, MySqlDbType.Float),
+ new MySqlParameter(PARM_ORDERID,SqlDbType.Int)};
+
+ MySQLHelper.CacheParameters(MySQL_UPDATE_ORDER, parms);
+ }
+ return parms;
+ }
+
+ private static MySqlParameter[] GetCreateHoldingParameters()
+ {
+
+ // Get the paramters from the cache
+ MySqlParameter[] parms = MySQLHelper.GetCacheParameters(MySQL_INSERT_HOLDING);
+ // If the cache is empty, rebuild the parameters
+ if (parms == null)
+ {
+ parms = new MySqlParameter[] {
+ new MySqlParameter(PARM_PURCHASEPRICE, MySqlDbType.Decimal, 14),
+ new MySqlParameter(PARM_QUANTITY, MySqlDbType.Float),
+ new MySqlParameter(PARM_PURCHASEDATE, MySqlDbType.DateTime),
+ new MySqlParameter(PARM_ACCOUNTID, MySqlDbType.Int32),
+ new MySqlParameter(PARM_SYMBOL, MySqlDbType.VarChar,20)};
+
+ // Add the parametes to the cached
+ MySQLHelper.CacheParameters(MySQL_INSERT_HOLDING, parms);
+ }
+ return parms;
+ }
+
+ private static MySqlParameter[] GetUpdateHoldingParameters()
+ {
+ // Get the paramters from the cache
+ MySqlParameter[] parms = MySQLHelper.GetCacheParameters(MySQL_UPDATE_HOLDING);
+ // If the cache is empty, rebuild the parameters
+ if (parms == null)
+ {
+ parms = new MySqlParameter[] {new MySqlParameter(PARM_HOLDINGID, MySqlDbType.Int32),
+ new MySqlParameter(PARM_QUANTITY, MySqlDbType.Float)};
+ // Add the parametes to the cached
+ MySQLHelper.CacheParameters(MySQL_UPDATE_HOLDING, parms);
+ }
+ return parms;
+ }
+
+ private static MySqlParameter[] GetCloseOrdersParameters()
+ {
+ // Get the paramters from the cache
+ MySqlParameter[] parms = MySQLHelper.GetCacheParameters(MySQL_CLOSE_ORDER);
+ // If the cache is empty, rebuild the parameters
+ if (parms == null)
+ {
+ parms = new MySqlParameter[] {
+ new MySqlParameter(PARM_ORDERSTATUS, MySqlDbType.VarChar,10),
+ new MySqlParameter(PARM_HOLDINGID, MySqlDbType.Int32),
+ new MySqlParameter(PARM_PRICE, MySqlDbType.Decimal, 14),
+ new MySqlParameter(PARM_ORDERID, MySqlDbType.Int32)};
+
+ // Add the parametes to the cached
+ MySQLHelper.CacheParameters(MySQL_CLOSE_ORDER, parms);
+ }
+ return parms;
+ }
+
+ }
+}
Added: incubator/stonehenge/trunk/stocktrader/dotnet/common/StockTraderDALMySQL/StockTraderDALMySQL.csproj
URL: http://svn.apache.org/viewvc/incubator/stonehenge/trunk/stocktrader/dotnet/common/StockTraderDALMySQL/StockTraderDALMySQL.csproj?rev=817792&view=auto
==============================================================================
--- incubator/stonehenge/trunk/stocktrader/dotnet/common/StockTraderDALMySQL/StockTraderDALMySQL.csproj (added)
+++ incubator/stonehenge/trunk/stocktrader/dotnet/common/StockTraderDALMySQL/StockTraderDALMySQL.csproj Tue Sep 22 19:34:18 2009
@@ -0,0 +1,93 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <PropertyGroup>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <ProductVersion>9.0.30729</ProductVersion>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{DD924D91-04C2-4EBB-AFB9-E96E305E1F07}</ProjectGuid>
+ <OutputType>Library</OutputType>
+ <AppDesignerFolder>Properties</AppDesignerFolder>
+ <RootNamespace>Trade.DALMySQL</RootNamespace>
+ <AssemblyName>Trade.DALMySQL</AssemblyName>
+ <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
+ <FileAlignment>512</FileAlignment>
+ <SignAssembly>true</SignAssembly>
+ <AssemblyOriginatorKeyFile>stocktrader.snk</AssemblyOriginatorKeyFile>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+ <DebugSymbols>true</DebugSymbols>
+ <DebugType>full</DebugType>
+ <Optimize>false</Optimize>
+ <OutputPath>bin\Debug\</OutputPath>
+ <DefineConstants>DEBUG;TRACE</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+ <DebugType>pdbonly</DebugType>
+ <Optimize>true</Optimize>
+ <OutputPath>bin\Release\</OutputPath>
+ <DefineConstants>TRACE</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ </PropertyGroup>
+ <ItemGroup>
+ <Reference Include="MySql.Data, Version=6.1.2.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d, processorArchitecture=MSIL" />
+ <Reference Include="System" />
+ <Reference Include="System.Core">
+ <RequiredTargetFramework>3.5</RequiredTargetFramework>
+ </Reference>
+ <Reference Include="System.Xml.Linq">
+ <RequiredTargetFramework>3.5</RequiredTargetFramework>
+ </Reference>
+ <Reference Include="System.Data.DataSetExtensions">
+ <RequiredTargetFramework>3.5</RequiredTargetFramework>
+ </Reference>
+ <Reference Include="System.Data" />
+ <Reference Include="System.Xml" />
+ </ItemGroup>
+ <ItemGroup>
+ <Compile Include="Config.cs" />
+ <Compile Include="Customer.cs" />
+ <Compile Include="MarketSummary.cs" />
+ <Compile Include="MySQLHelper.cs" />
+ <Compile Include="Order.cs" />
+ <Compile Include="Properties\AssemblyInfo.cs" />
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="..\..\business_service\BusinessServiceDataContract\BusinessServiceDataContract.csproj">
+ <Project>{EBB1604B-3F50-4A81-87C3-1AE4029EEEC6}</Project>
+ <Name>BusinessServiceDataContract</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\..\config_service\ConfigServiceDataContract\ConfigServiceDataContract.csproj">
+ <Project>{82B5FA73-8A82-4DC0-B473-43B78543668B}</Project>
+ <Name>ConfigServiceDataContract</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\IDAL\StockTraderIDAL.csproj">
+ <Project>{509EB16A-6586-4200-8323-32438C9B47DC}</Project>
+ <Name>StockTraderIDAL</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\StockTraderUtility\Utility.csproj">
+ <Project>{382E6E1C-E430-4F6C-BC41-5D84A3798B02}</Project>
+ <Name>Utility</Name>
+ </ProjectReference>
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="stocktrader.snk" />
+ </ItemGroup>
+ <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+ <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
+ Other similar extension points exist, see Microsoft.Common.targets.
+ <Target Name="BeforeBuild">
+ </Target>
+ <Target Name="AfterBuild">
+ </Target>
+ -->
+ <PropertyGroup>
+ <PostBuildEvent>if not exist "$(SolutionDir)$(OutDir)\
" mkdir "$(SolutionDir)$(OutDir)\
"
+copy "$(TargetPath)" "$(SolutionDir)$(OutDir)\
"
+
+copy "$(TargetDir)$(TargetName).pdb" "$(SolutionDir)$(OutDir)\"</PostBuildEvent>
+ </PropertyGroup>
+</Project>
\ No newline at end of file
Added: incubator/stonehenge/trunk/stocktrader/dotnet/common/StockTraderDALMySQL/stocktrader.snk
URL: http://svn.apache.org/viewvc/incubator/stonehenge/trunk/stocktrader/dotnet/common/StockTraderDALMySQL/stocktrader.snk?rev=817792&view=auto
==============================================================================
Binary file - no diff available.
Propchange: incubator/stonehenge/trunk/stocktrader/dotnet/common/StockTraderDALMySQL/stocktrader.snk
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream