在Asp.NetC #中使用MySQL存储过程

relj7zay  于 2023-10-21  发布在  .NET
关注(0)|答案(2)|浏览(83)

我找不到这个代码中的错误。据我所知,这是好的,并希望正确执行,但我得到一个错误:
错误[42000] [MySQL][ODBC 3.51驱动程序][mysqld-5.7.11]
SQL语法中有错误;检查与您的MySQL服务器版本对应的手册,以了解在第1行的“ViewBatchByID”附近使用的正确语法
我的代码

string Message = null;

OdbcCommand Cmd = new OdbcCommand();
Cmd.Connection = Connection.con;
Cmd.CommandText = "ViewBatchByID";
Cmd.CommandType = CommandType.StoredProcedure;
Cmd.Parameters.AddWithValue("@p0", 1);

try
{
    Cmd.ExecuteNonQuery();
}
catch(Exception ex)
{
   Message = ex.Message.ToString();
}

这里ViewBatchByID是我的存储过程,它在服务器上工作正常。

xfyts7mz

xfyts7mz1#

我发现这个问题是因为我有同样的问题。经过更多的研究和一些试验和错误,我能够解决它如下。
首先,需要为MySQL更改命令文本。Microsoft SQL Server只需要命令文本中的存储过程名称,但对于MySQL,您需要指定要执行的完整命令。因此,例如,具有一个参数的存储过程需要设置如下:

Cmd.CommandText = "{call ViewBatchByID(?)}";

请注意,如果存储过程有多个参数,则必须为每个参数输入一个问号,每个参数之间用逗号隔开。因此,如果您的存储过程需要两个参数,则需要如下设置:

Cmd.CommandText = "{call ViewBatchByID(?,?)}";

此外,MySQL不使用@符号来表示存储过程中的参数。您的参数应按如下方式添加:

Cmd.Parameters.Add(new OdbcParameter("firstParam", firstValue));

因此,原始代码片段的解决方案可能如下所示:

string Message = null;

try
{
    using (var cmd = new OdbcCommand("{call ViewBatchByID(?)}", Connection.con))
    {
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.Parameters.Add(new OdbcParameter("p0", 1));
        
        cmd.ExecuteNonQuery();
    }
}
catch (Exception ex)
{
    Message = ex.Message.ToString();
}

这假定从原始代码片段来看,连接已经打开并从对象“Connection.con”引用。

umuewwlo

umuewwlo2#

检查服务器的连接设置。Database设置好了吗?
Driver={SQL Server};Server=(local);Trusted_Connection=Yes;Database=AdventureWorks;

相关问题