我在Ubuntu 16.04联想ThinkStation桌面上使用MySql 5.6服务器,客户端,C#连接器和Workbench。当使用MySQL C#Connector API以编程方式调用时,我遇到下面显示的以下存储过程的问题:
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)))
在这个背景下,我在这里陈述了我希望聪明的程序员可以解决的问题:
当使用MySQL C#Connector API以编程方式调用存储过程spAddInto_TableOne_and_TableTwo时,只插入TableTwo并且TableOne保持为空。
有趣的是,当我在MySql Workbench中运行spAddInto_TableOne_and_TableTwo时,我注意到它可以通过在TableOne和TableTwo中插入一行来运行。
这是我的C#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#代码中使用C#MySqlConnection.BeginTransaction()和MySqlConnection.Commit()吗?
非常感谢任何帮助。