开发者

Unable to insert data from two or more clients at same time in to mysql

.net 2.0 and C# - I am inserting the row in to mysql using a stored procedure, but when I tried to insert data from two clients at same time, I found only one row is inserted and not both. I am unable to get the error. How can I tune the DB or my code to insert all the data and no threading is appreciated

Here goes my table

delimiter $$

CREATE TABLE `tblemployee` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `EmpID` int(11) NOT NULL,
  `FedTaxID` varchar(9) CHARACTER SET utf8 NOT NULL,
  `FirstName` varchar(20) DEFAULT NULL,
  `MiddleInitial` varchar(20) DEFAULT NULL,
  `LastName` varchar(20) DEFAULT NULL,
  `SSN` decimal(9,0) NOT NULL,
  `DateOfBirth` varchar(50) CHARACTER SET utf8 DEFAULT NULL,
  `MaritalTypeID` varchar(4) CHARACTER SET utf8 DEFAULT NULL,
  `EmployeeTypeID` varchar(1) CHARACTER SET utf8 DEFAULT NULL,
  `EmploymentStatusTypeID` varchar(1) CHARACTER SET utf8 DEFAULT NULL,
  `HireDate` varchar(50) CHARACTER SET utf8 DEFAULT NULL,
  `EmployeeWorkLocation` varchar(30) CHARACTER SET utf8 DEFAULT NULL,
  `RegularPay` double DEFAULT NULL,
  `HourlyRate` double DEFAULT NULL,
  `OtherHoursRate` double DEFAULT NULL,
  `StartDate` date NOT NULL,
  `EndDate` date NOT NULL,
  `PayFrequencyTypeID` varchar(50) DEFAU开发者_运维知识库LT NULL,
  PRIMARY KEY (`EmpID`,`FedTaxID`),
  UNIQUE KEY `SSN_UNIQUE` (`SSN`),
  KEY `id` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=385 DEFAULT CHARSET=latin1$$

Here goes my stored procedure:

CREATE DEFINER=`root`@`%` PROCEDURE `uspEmployeeAdd`(_EmpID int,_FedTaxID varchar(9),_SSN decimal(9,0),_DateOfBirth varchar(50),_MaritalTypeID varchar(2),_EmployeeTypeID varchar(1),_EmploymentStatusTypeID varchar(1),_HireDate varchar(50),_EmployeeWorkLocation varchar(30),_PayFrequencyType varchar(2),_RegularPay double,_HourlyRate double,_OtherHoursRate double)
BEGIN
    insert delayed into tblEmployee(EmpID, FedTaxID, SSN, DateOfBirth, MaritalTypeID, EmployeeTypeID, EmploymentStatusTypeID, HireDate, EmployeeWorkLocation, PayFrequencyType, RegularPay, HourlyRate, OtherHoursRate)     
    values(_EmpID, _FedTaxID, _SSN, _DateOfBirth, _MaritalTypeID, _EmployeeTypeID, _EmploymentStatusTypeID, _HireDate, _EmployeeWorkLocation, _PayFrequencyType, _RegularPay, _HourlyRate, _OtherHoursRate);

END

here goes my .net code

public bool Adding()
    {
        m_bFlag = false;

        if (m_oConn.State != ConnectionState.Open)
        {
            m_oConn.Open();
        }
        MySqlTransaction otrans = new MySqlTransaction();
        otrans=m_oConn.BeginTransaction();
        m_oCmd = new MySqlCommand(StoredProcNames.EmployeeDetails_uspEmployeeDetailsInsert, m_oConn);
        m_oCmd.CommandType = CommandType.StoredProcedure;
        m_oCmd.Parameters.AddWithValue("_EmpID", EmpID);
        m_oCmd.Parameters.AddWithValue("_FedTaxID", FedTaxID);
        m_oCmd.Parameters.AddWithValue("_FirstName", FirstName);
        m_oCmd.Parameters.AddWithValue("_MiddleInitial", MiddleInitial);
        m_oCmd.Parameters.AddWithValue("_LastName", LastName);
        m_oCmd.Parameters.AddWithValue("_SSN", SSN);
        m_oCmd.Parameters.AddWithValue("_MaritalTypeID", Gender);
        m_oCmd.Parameters.AddWithValue("_HireDate", HireDate);
        m_oCmd.Parameters.AddWithValue("_DateOfBirth", DateOfBirth);
        m_oCmd.Parameters.AddWithValue("_PayFrequencyTypeID", PayFrequencyTypeID);
        m_oCmd.Parameters.AddWithValue("_StartDate", StartDate);
        m_oCmd.Parameters.AddWithValue("_EndDate", EndDate);
        try
        {
            if (m_oCmd.ExecuteNonQuery() > 0)
            {
                m_bFlag = true;
                otrans.Commit();
            }
        }
        catch (MySqlException mse)
        {
            throw mse;
            otrans.Rollback();
        }
        finally
        {
            m_oConn.Close();
        }

        return this.m_bFlag;
    }
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜