c # asp net을 사용하여 mysql 저장 프로 시저를 실행하려고합니다.
mysql에서 시도한이 저장 프로시 저는 잘 작동합니다.
대신 내 프로젝트의 코드에서 테스트했습니다. mysql 구문 오류가 있습니다.
오류 [42000] [MySQL] [ODBC 5.1 드라이버] [mysqld-8.0.12] SQL 구문에 오류가 있습니다. MySQL 서버 버전에 해당하는 설명서에서 1 행의 'mysp'근처에서 사용할 올바른 구문을 확인하십시오.
"PRINT"명령의 출력, 즉 C #의 프로 시저를 추출하는 방법은 무엇입니까?
.cs
using (OdbcConnection cn =
new OdbcConnection(ConfigurationManager.ConnectionStrings["cn"].ConnectionString))
{
using (OdbcCommand command =
new OdbcCommand("mysp", cn))
{
try
{
command.Connection.Open();
command.CommandType = CommandType.StoredProcedure;
command.Parameters.AddWithValue("sYear", ddlyear.SelectedValue);
using (OdbcDataAdapter sda = new OdbcDataAdapter(command))
{
DataTable dt = new DataTable();
sda.Fill(dt);
gv.DataSource = dt;
gv.DataBind();
}
}
catch (Exception ex)
{
throw new ApplicationException("operation failed!", ex);
}
finally
{
command.Connection.Close();
}
}
}
sp
CREATE DEFINER=`root`@`%` PROCEDURE `mysp`(IN sYear VARCHAR(255))
BEGIN
DECLARE 2sYear VARCHAR(255);
SET 2sYear = sYear;
SET @s = CONCAT('SELECT * FROM `mytable_',2sYear,'`;');
PREPARE stmt FROM @s;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END
편집하다
이 문제는 사용자 nbk의 제안으로 해결되며 원본 텍스트에서 복사 붙여 넣기 오류가 발생했습니다.
절차에 대한 변수는 sYear
하지만 코드에서 sAnno
CREATE TABLE mytable_2025 ( id int)
✓
CREATE PROCEDURE `mysp`(IN sYear VARCHAR(255)) BEGIN DECLARE 2sYear VARCHAR(255); SET 2sYear = sYear; SET @s = CONCAT('SELECT * FROM `mytable_',2sYear,'`;'); PREPARE stmt FROM @s; EXECUTE stmt; DEALLOCATE PREPARE stmt; END
✓
call mysp('2025')
| 아이디 | | -: | ✓
SELECT @s
| @s | | : ---------------------------- | | SELECT * FROM`mytable_2025`; |
SELECT @2sYear
| @ 2sYear | | : ------ | | null |
db <> 여기에 바이올린
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다