您的 SQL 语法错误,.net 的 mysql 连接器
You have an error in your SQL syntax, mysql connector for .net
存储过程:
CREATE DEFINER=`newdb`@`%` PROCEDURE `GetMaximumIDsCount`(IN AppID INT,IN isBurnCenter INT,IN BurnCenterID INT)
BEGIN
IF isBurnCenter = 1 THEN
SELECT MAX(CAST(b.hospitalid AS SIGNED))
FROM tblhosipital b
WHERE b.appId = AppID AND b.burncenterid IS NULL;
END IF;
IF isBurnCenter = 0 THEN
SELECT MAX(CAST(h.hospitalid AS SIGNED))
FROM tblhosipital h
WHERE h.appId = AppID AND h.burncenterid <> '' AND h.burncenterid = BurnCenterID;
END IF;
END
从 ApplicationDbContext 调用(代码优先)
public virtual ObjectResult<long?> GetMaximumIDsCount2(Nullable<int> appID, Nullable<int> isBurnCenter, Nullable<int> burnCenterID)
{
var appIDParameter = appID.HasValue ?
new ObjectParameter("AppID", appID) :
new ObjectParameter("AppID", typeof(int));
var isBurnCenterParameter = isBurnCenter.HasValue ?
new ObjectParameter("isBurnCenter", isBurnCenter) :
new ObjectParameter("isBurnCenter", typeof(int));
var burnCenterIDParameter = burnCenterID.HasValue ?
new ObjectParameter("BurnCenterID", burnCenterID) :
new ObjectParameter("BurnCenterID", typeof(int));
return ((IObjectContextAdapter)this).ObjectContext.ExecuteStoreQuery<Nullable<long>>("GetMaximumIDsCount @AppID, @isBurnCenter, @BurnCenterID", appIDParameter, isBurnCenterParameter, burnCenterIDParameter);
}
获取异常:
You have an error in your SQL syntax; check the manual that
corresponds to your MySQL server version for the right syntax to use
near 'GetMaximumIDsCount @AppID, @isBurnCenter, @BurnCenterID' at line
1
您需要在存储过程名称前添加CALL [procedure_name]()
方法:
return ((IObjectContextAdapter)this)
.ObjectContext
.ExecuteStoreQuery<List<long?>>("CALL GetMaximumIDsCount(@AppID, @isBurnCenter, @BurnCenterID)",
appIDParameter, isBurnCenterParameter, burnCenterIDParameter);
注意: MySQL 使用此语法执行的存储过程:
CALL procedure_name(parameter_list)
注2:使用FirstOrDefault()
或SingleOrDefault()
到return恰好来自ObjectResult<T>
的一个结果集:
var x = db.GetMaximumIDsCount2(...).FirstOrDefault();
作为旁注,您可以尝试使用 MySqlParameter
而不是 ObjectParameter
:
来声明参数
// you can change DBNull.Value with any appropriate value
var appIDParameter = new MySqlParameter("AppID", MySqlDbType.Int).Value = (appID.HasValue) ? appID : DBNull.Value;
var isBurnCenterParameter = new MySqlParameter("isBurnCenter", MySqlDbType.Int).Value = (isBurnCenter.HasValue) ? isBurnCenter : DBNull.Value;
var isBurnCenterParameter = new MySqlParameter("BurnCenterID", MySqlDbType.Int).Value = (burnCenterID.HasValue) ? burnCenterID : DBNull.Value;
参考:
存储过程:
CREATE DEFINER=`newdb`@`%` PROCEDURE `GetMaximumIDsCount`(IN AppID INT,IN isBurnCenter INT,IN BurnCenterID INT)
BEGIN
IF isBurnCenter = 1 THEN
SELECT MAX(CAST(b.hospitalid AS SIGNED))
FROM tblhosipital b
WHERE b.appId = AppID AND b.burncenterid IS NULL;
END IF;
IF isBurnCenter = 0 THEN
SELECT MAX(CAST(h.hospitalid AS SIGNED))
FROM tblhosipital h
WHERE h.appId = AppID AND h.burncenterid <> '' AND h.burncenterid = BurnCenterID;
END IF;
END
从 ApplicationDbContext 调用(代码优先)
public virtual ObjectResult<long?> GetMaximumIDsCount2(Nullable<int> appID, Nullable<int> isBurnCenter, Nullable<int> burnCenterID)
{
var appIDParameter = appID.HasValue ?
new ObjectParameter("AppID", appID) :
new ObjectParameter("AppID", typeof(int));
var isBurnCenterParameter = isBurnCenter.HasValue ?
new ObjectParameter("isBurnCenter", isBurnCenter) :
new ObjectParameter("isBurnCenter", typeof(int));
var burnCenterIDParameter = burnCenterID.HasValue ?
new ObjectParameter("BurnCenterID", burnCenterID) :
new ObjectParameter("BurnCenterID", typeof(int));
return ((IObjectContextAdapter)this).ObjectContext.ExecuteStoreQuery<Nullable<long>>("GetMaximumIDsCount @AppID, @isBurnCenter, @BurnCenterID", appIDParameter, isBurnCenterParameter, burnCenterIDParameter);
}
获取异常:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'GetMaximumIDsCount @AppID, @isBurnCenter, @BurnCenterID' at line 1
您需要在存储过程名称前添加CALL [procedure_name]()
方法:
return ((IObjectContextAdapter)this)
.ObjectContext
.ExecuteStoreQuery<List<long?>>("CALL GetMaximumIDsCount(@AppID, @isBurnCenter, @BurnCenterID)",
appIDParameter, isBurnCenterParameter, burnCenterIDParameter);
注意: MySQL 使用此语法执行的存储过程:
CALL procedure_name(parameter_list)
注2:使用FirstOrDefault()
或SingleOrDefault()
到return恰好来自ObjectResult<T>
的一个结果集:
var x = db.GetMaximumIDsCount2(...).FirstOrDefault();
作为旁注,您可以尝试使用 MySqlParameter
而不是 ObjectParameter
:
// you can change DBNull.Value with any appropriate value
var appIDParameter = new MySqlParameter("AppID", MySqlDbType.Int).Value = (appID.HasValue) ? appID : DBNull.Value;
var isBurnCenterParameter = new MySqlParameter("isBurnCenter", MySqlDbType.Int).Value = (isBurnCenter.HasValue) ? isBurnCenter : DBNull.Value;
var isBurnCenterParameter = new MySqlParameter("BurnCenterID", MySqlDbType.Int).Value = (burnCenterID.HasValue) ? burnCenterID : DBNull.Value;
参考: