Я использую MySql 5.6 Server, клиент, C# Connector и Workbench на рабочем столе Lenovo ThinkStation с Ubuntu 16.04. У меня возникла проблема со следующей хранимой процедурой, показанной ниже, когда она программно вызывается с помощью API MySQL C# Connector:
CREATE PROCEDURE spAddInto_TableOne_and_TableTwo(
IN now datetime not null,
IN quantity int not null,
IN desc nvarchar(32) not null)
BEGIN
call spAddInto_TableOne(now,quantity,desc);
call spAddInto_TableTwo(now,quantity,desc);
END;
где MySql TableOne выглядит так:
CREATE TABLE TableOne(
EventDateTime datetime NOT NULL,
Quantity smallint NULL,
Description nvarchar(32) NULL,
ID int AUTO_INCREMENT NOT NULL,
PRIMARY KEY (ID)
)
а таблица 2 выглядит так:
CREATE TABLE TableOne(
EventDateTime datetime NOT NULL,
Quantity smallint NULL,
Description nvarchar(32) NULL,
ID int AUTO_INCREMENT NOT NULL,
PRIMARY KEY (ID)
)
а также
Хранимые процедуры MySql spAddInto_TableOne и spAddInto_TableTwo очень похожи на операторы атомарной вставки, использующие неявные транзакции, как показано здесь:
INSERT INTO TableOne
( EventDateTime
, Type
, Description)
VALUES
( _eventDateTime
, _type
, ltrim(rtrim(_description)))
а также
INSERT INTO TableTwo
( EventDateTime
, Type
, Description)
VALUES
( _eventDateTime
, _type
, ltrim(rtrim(_description)))
На этом фоне я излагаю свою проблему, которую, как я надеялся, может решить умный программист:
Когда хранимая процедура spAddInto_TableOne_and_TableTwo программно вызывается с помощью API MySQL C# Connector, в нее вставляется только TableTwo, а TableOne остается пустой.
Интересно отметить, что когда я запускал spAddInto_TableOne_and_TableTwo в MySql Workbench, я заметил, что он нормально работает, вставляя строку в TableOne и TableTwo.
Это мой код структуры С# MySql Connector:
SqlConnection conn = new SqlConnection(MyConnectionString);
conn.Open();
SqlCommand cmd = new SqlCommand(sProc, conn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("eventDateTime", eventDate);
cmd.Parameters.AddWithValue("eventtype", type);
cmd.Parameters.AddWithValue("description", desc.Trim())
cmd.ExecuteNonQuery();
Должен ли я использовать C# MySqlConnection.BeginTransaction() и MySqlConnection.Commit() в коде C# непосредственно выше?
Любая помощь приветствуется.
@
или?
даже с MySql. - person Crowcoder   schedule 16.07.2016