仅使用MySQL C#Connector API

时间:2016-07-16 09:19:27

标签: c# mysql stored-procedures

我在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()吗?

非常感谢任何帮助。

0 个答案:

没有答案