c# - 存储过程适用于 Mysql 工作台,但不适用于 C# 代码
问题描述
我有一个存储过程,我想删除它然后想重新创建它。它在 Mysql 工作台上工作,但在 c# 代码中不工作。
我正在使用 MySql Workbench 6.3 CE
这是存储过程的试运行:
DROP PROCEDURE IF EXISTS AccountGetAccountOpeningClosingStock;
DELIMITER $$
CREATE DEFINER=`root`@`%` PROCEDURE
`AccountGetAccountOpeningClosingStock`(IN _endDate datetime)
BEGIN
Select * From openingclosingstock Where CreateDate <= _endDate order by
CreateDate asc;
END$$
DELIMITER ;
这是来自 C# 代码的调用:
string myConnectionString = FetchDbConnectionString(environment, item);
MySqlConnection mySqlConnection = new MySqlConnection(myConnectionString);
MySqlCommand mySqlCommand = new MySqlCommand(storedProcedureSqlQuery, mySqlConnection);
await mySqlConnection.OpenAsync();
var reader = await mySqlCommand.ExecuteReaderAsync();
while (await reader.ReadAsync())
{
// do something
}
reader.Close();
await mySqlConnection.CloseAsync();
来自 C# 代码的错误:
您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 'DELIMITER $$ CREATE DEFINER=
root
@%
PROCEDURE `AccountGetAccountOpeningClosi'附近使用正确的语法
我为示例创建了一个应用程序: 演示存储过程
解决方案
看起来您正试图让 proc 同时重新创建和运行。这应该可以为您提供您正在寻找的数据,否则请调用 SQL 中的过程来获取数据。如果您尝试重新创建(测试它是否存在),请在需要数据之前在程序的单独部分中进行。
string myConnectionString = FetchDbConnectionString(environment, item);
MySqlConnection mySqlConnection = new MySqlConnection(myConnectionString);
string SQLC= "Select * From openingclosingstock Where CreateDate <= _endDate
order by CreateDate asc;"
MySqlCommand mySqlCommand = new
MySqlCommand(SQLC, mySqlConnection);
await mySqlConnection.OpenAsync();
var reader = await mySqlCommand.ExecuteReaderAsync();
while (await reader.ReadAsync())
{
//do something
}
reader.Close();
await mySqlConnection.CloseAsync();
还是您在这里创建生产者以便稍后调用它?
删除开头的 DELIMITER $$ 和最后一个 END 后的 $$
DELIMITER 是一个 MySQL 客户端命令,使您能够在定义存储例程时临时更改其语句终止符。
如果您从不使用分号作为语句终止符的编程接口中定义存储例程,则存储例程定义中的分号不会出现任何特殊问题。
不知道那个代码能不能用。也许试试这个:
using (MySqlConnection conn = new MySqlConnection(connectionString))
{
conn.Open();
using (MySqlTransaction trans = conn.BeginTransaction())
{
using (MySqlCommand command = conn.CreateCommand())
{
command.CommandText = query;
command.ExecuteNonQuery();
}
trans.Commit();
}
}
和 SQL:
DROP PROCEDURE IF EXISTS AccountGetAccountOpeningClosingStock;
CREATE PROCEDURE AccountGetAccountOpeningClosingStock(IN endDate datetime)
BEGIN
Select * From openingclosingstock
Where CreateDate <= endDate order by CreateDate;
END;
推荐阅读
- node.js - MongoDB 未使用 graphql 在节点 js 中更新
- java - Firestore 文档中引用类型的用例是什么以及如何在 android 应用程序中专门使用它?
- powershell - 将目录中的文件列表添加到数组列表
- python - 具有相同或新列表的新名称?
- typescript - 如何将函数标记为可更新/如何创建需要函数或类的类型
- git - 虽然我正在提交 git commit -m "first commit" 它说告诉我你是谁,我该如何处理
- android - Android 上的 Firemonkey (Rad Studio 10.3.2) 当前时间问题
- android - 您的防病毒程序可能会影响您的构建性能。Android Studio 检查了以下目录:
- oracle - oracle函数,过程和PostgreSQL函数,存储过程之间的区别?
- arrays - 数组搜索 1 和 0