我收到此错误:
必须声明标量变量“@ECAT_ID”
如何解决这个问题?请帮帮我
ALTER PROCEDURE [dbo].[spADDEVENT]
(@CULTEVNT_NAME varchar(50),
@CULTEVNT_SDATE Date,
@CULTEVNT_EDATE Date,
@CULTEVNT_RULES1 varchar(255),
@CULTEVNT_RULES2 varchar(255),
@CULTEVNT_RULES3 varchar(255),
@CULTEVNT_RULES4 varchar(255),
@CULTEVNT_FEES INT,
@CULTEVNT_ADMIN VARCHAR(50),
@ECAT_NAME VARCHAR(50),
@E_ADMIN VARCHAR(50),
@ESUBCAT_NAME VARCHAR(50),
@E_ID INT,
@ESUBCATS_ID INT,
@ECATS_ID INT)
AS
BEGIN
--DECLARE @ECATS_ID INT
INSERT INTO EVENT_CAT(ECAT_ID, ECAT_NAME, E_ADMIN)
VALUES(@ECATS_ID, @ECAT_NAME, @E_ADMIN)
SET @ECATS_ID = SCOPE_IDENTITY();
--DECLARE @ESUBCATS_ID INT
INSERT INTO EVENT_SCAT(@ESUBCATS_ID, @ECAT_ID, @ESUBCAT_NAME)
VALUES(@ESUBCATS_ID, @ECATS_ID, @ESUBCAT_NAME)
SET @ESUBCATS_ID = SCOPE_IDENTITY();
INSERT INTO CULTEVENT_T(CULTEVNT_NAME, CULTEVNT_SDATE, CULTEVNT_EDATE,
CULTEVNT_RULES1, CULTEVNT_RULES2,
CULTEVNT_RULES3, CULTEVNT_RULES4,
CULTEVNT_FEES, CULTEVNT_ADMIN,
ESUBCATS_ID, ECATS_ID, E_ID)
VALUES (@CULTEVNT_NAME, @CULTEVNT_SDATE, @CULTEVNT_EDATE,
@CULTEVNT_RULES1, @CULTEVNT_RULES2,
@CULTEVNT_RULES3, @CULTEVNT_RULES4,
@CULTEVNT_FEES, @CULTEVNT_ADMIN,
@ESUBCATS_ID, @ECATS_ID, @E_ID)
END
检查整个存储过程是否正确?
这是我的C#代码。
protected void addevnt_Click(object sender, EventArgs e)
{
string spname = "spADDEVENT"; ;
con.Open();
SqlCommand com = new SqlCommand(spname, con);
com.CommandType = CommandType.StoredProcedure;
com.Parameters.AddWithValue("@CULTEVNT_NAME", txtevntname.Text.ToString());
com.Parameters.AddWithValue("@ECAT_NAME", Textecat.Text.ToString());
com.Parameters.AddWithValue("@ESUBCAT_NAME",Textscat.Text.ToString());
com.Parameters.AddWithValue("@CULTEVNT_ADMIN ",txtaname.Text.ToString());
com.Parameters.AddWithValue("@E_ADMIN", adminame.Text.ToString());
com.Parameters.AddWithValue("@CULTEVNT_SDATE", txtesdate.Text.ToString());
com.Parameters.AddWithValue("@CULTEVNT_EDATE", txtedate.Text.ToString());
com.Parameters.AddWithValue("@CULTEVNT_RULES1", txtrul1.Text.ToString());
com.Parameters.AddWithValue("@CULTEVNT_RULES2", txtrul2.Text.ToString());
com.Parameters.AddWithValue("@CULTEVNT_RULES3", txtrule3.Text.ToString());
com.Parameters.AddWithValue("@CULTEVNT_RULES4", Textrule4.Text.ToString());
com.Parameters.AddWithValue("@CULTEVNT_FEES",txtfees.Text.ToString());
com.Parameters.AddWithValue("@ESUBCATID", txtfees.Text.ToString());
com.ExecuteNonQuery();
con.Close();
lblMessage1.Text = "data entered";
}
实际上我想在单个表单的不同表中插入数据。表格包含pk和fk
并且我已将表的大多数id作为标识列。
你可以查看我之前的Q,它包含表格确定
答案 0 :(得分:1)
您的参数为@ECAT_ID
而不是{{1}}
答案 1 :(得分:0)
描述错误并不容易,所以我在代码中使用了注释。基本上它们在变量中用于保存标识值在错误的位置,没有值,并且试图在没有值的情况下插入,并且没有set identity_insert [tbl] on... off
。
ALTER PROCEDURE [dbo].[spADDEVENT]
(@CULTEVNT_NAME varchar(50),
@CULTEVNT_SDATE Date,
@CULTEVNT_EDATE Date,
@CULTEVNT_RULES1 varchar(255),
@CULTEVNT_RULES2 varchar(255),
@CULTEVNT_RULES3 varchar(255),
@CULTEVNT_RULES4 varchar(255),
@CULTEVNT_FEES INT,
@CULTEVNT_ADMIN VARCHAR(50),
@ECAT_NAME VARCHAR(50),
@E_ADMIN VARCHAR(50),
@ESUBCAT_NAME VARCHAR(50),
@E_ID INT--,
/* if these are identity, you can not send the value
maybe you want them as output parameters? */
--@ESUBCATS_ID INT,
--@ECATS_ID INT
)
AS
BEGIN
DECLARE @ECATS_ID INT
/* You do not know the value of @ECATS_ID yet, do you? So you can not insert it */
INSERT INTO EVENT_CAT(ECAT_NAME, E_ADMIN)
VALUES(@ECAT_NAME, @E_ADMIN)
SET @ECATS_ID = SCOPE_IDENTITY();
/* now you know the value of @ECATS_ID, so you can use that one in the next insert */
DECLARE @ESUBCATS_ID INT
/* Insert into tbl (columns) ... , not insert into tbl (@parameters) ...*/
/* You do not know the value of @ESUBCATS_ID yet, do you? So you can not insert it */
INSERT INTO EVENT_SCAT(ECAT_ID, ESUBCAT_NAME)
VALUES(@ECATS_ID, @ESUBCAT_NAME)
SET @ESUBCATS_ID = SCOPE_IDENTITY();
/* now you know the value of @ESUBCATS_ID, so you can use that one in the next insert */
INSERT INTO CULTEVENT_T(CULTEVNT_NAME, CULTEVNT_SDATE, CULTEVNT_EDATE,
CULTEVNT_RULES1, CULTEVNT_RULES2,
CULTEVNT_RULES3, CULTEVNT_RULES4,
CULTEVNT_FEES, CULTEVNT_ADMIN,
ESUBCATS_ID, ECATS_ID, E_ID)
VALUES (@CULTEVNT_NAME, @CULTEVNT_SDATE, @CULTEVNT_EDATE,
@CULTEVNT_RULES1, @CULTEVNT_RULES2,
@CULTEVNT_RULES3, @CULTEVNT_RULES4,
@CULTEVNT_FEES, @CULTEVNT_ADMIN,
@ESUBCATS_ID, @ECATS_ID, @E_ID)