我有这个存储的行为无效。如果我在管理工作室中尝试这个查询,我的参数填写就可以了,我无法看到我的代码中是否有任何错误,但我希望有人在这里注意到我做错了
CREATE PROCEDURE new_project
-- Add the parameters for the stored procedure here
@proj_naam nvarchar = null,
@plaats nvarchar = null,
@opd_geef int = 0,
@status int = 0,
@proj_id int = 0 AS BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for procedure here
INSERT INTO project (naam_project, plaats, opdrachtgeverZEEBREGTS_nr, status, project_NR)
VALUES (@proj_naam, @plaats, @opd_geef, @status, @proj_id) END GO
和c#代码:
System.Data.SqlClient.SqlConnection con;
con = new System.Data.SqlClient.SqlConnection();
con.ConnectionString = Global.ConnectionString_fileserver;
con.Open();
string stopro = "";
switch (type)
{
case 1:
stopro = "new_project";
break;
case 2:
stopro = "new_bedrijf";
break;
case 3:
stopro = "new_persoon";
break;
}
SqlCommand command = new SqlCommand(stopro, con);
command.CommandType = CommandType.StoredProcedure;
switch (type)
{
case 1:
SqlParameter proj_naam = command.Parameters.Add("@proj_naam", SqlDbType.NVarChar);
SqlParameter plaats = command.Parameters.Add("@plaats", SqlDbType.NVarChar);
SqlParameter opdrachtgever = command.Parameters.Add("@opd_geef", SqlDbType.Int);
SqlParameter status = command.Parameters.Add("@status", SqlDbType.Int);
SqlParameter proj_id = command.Parameters.Add("@proj_id", SqlDbType.Int);
proj_naam.Value = tb_proj_projectnaam.Text; proj_naam.Direction = ParameterDirection.Input;
plaats.Value = tb_proj_plaats.Text; plaats.Direction = ParameterDirection.Input;
opdrachtgever.Value = cb_proj_opdrachtgever.SelectedValue; opdrachtgever.Direction = ParameterDirection.Input;
status.Value = cb_proj_status.SelectedValue; status.Direction = ParameterDirection.Input;
proj_id.Value = id; proj_id.Direction = ParameterDirection.Input;
break;
}
int nwok = command.ExecuteNonQuery();
con.Close();
所以我希望有人可以提前帮助你!
答案 0 :(得分:3)
您的break
int nwok = command.ExecuteNonQuery();
修改强>
与您的SPROC未执行的原因无关,但您SET NOCOUNT ON
会导致-1
返回ExecuteNonQuery
。您是否在插入前运行SET NOCOUNT OFF
?
答案 1 :(得分:1)
我可以看到,如果你的交换机案例中的Case不是 1 ,那么命令实例永远不会获得那些参数,所以它不会工作。
答案 2 :(得分:0)
您正在type
语句中测试switch
:
switch (type)
{
case 1:
stopro = "new_project";
break;
case 2:
stopro = "new_bedrijf";
break;
// etc.
}
然后在另一个type
语句中重新测试switch
,这只是一种过度杀伤力。将您的参数移到第一个switch
语句中,这可能会解决您的错误。
switch (type)
{
case 1:
stopro = "new_project";
SqlParameter proj_naam = command.Parameters.Add("@proj_naam", SqlDbType.NVarChar);
SqlParameter plaats = command.Parameters.Add("@plaats", SqlDbType.NVarChar);
SqlParameter opdrachtgever = command.Parameters.Add("@opd_geef", SqlDbType.Int);
SqlParameter status = command.Parameters.Add("@status", SqlDbType.Int);
SqlParameter proj_id = command.Parameters.Add("@proj_id", SqlDbType.Int);
proj_naam.Value = tb_proj_projectnaam.Text;
proj_naam.Direction = ParameterDirection.Input;
plaats.Value = tb_proj_plaats.Text;
plaats.Direction = ParameterDirection.Input;
opdrachtgever.Value = cb_proj_opdrachtgever.SelectedValue;
opdrachtgever.Direction = ParameterDirection.Input;
status.Value = cb_proj_status.SelectedValue;
status.Direction = ParameterDirection.Input;
proj_id.Value = id;
proj_id.Direction = ParameterDirection.Input;
break;
case 2:
stopro = "new_bedrijf";
// etc.
}