2011-02-17 168 views
2

我有这个存储过程不起作用。如果我在管理工作室尝试使用填充的参数在管理工作室中查询此作品,我看不到我的代码中是否做了任何错误,但我希望这里有人确实注意到我在做错事C#sql server 2008 r2插入存储过程将不起作用

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(); 

所以我希望有人能够帮助日Thnx提前!

+0

它会抛出一个特定的错误吗? – Xavinou 2011-02-17 14:28:13

+0

你能定义“不行”吗?它是否提供了错误信息,或者没有返回任何内容?它是否真的到达了ExecuteNonQuery行,因为它在中断之后,但可能是因为你剪掉了一些代码。 – 2011-02-17 14:29:06

+0

没有错误,int nwok存储的是受影响的行数,所以如果添加了一行,它将返回1,如果不是0,并且我只能得到0.如果检查我的数据库,新行不存在。所以它没有做任何事情。 – Daanvl 2011-02-17 14:31:50

回答

1

我可以看到,如果case不是在你的switch case那么命令实例永远不会得到这些参数,所以它不会工作。

3

您在int nwok = command.ExecuteNonQuery();

编辑

没有关系,为什么你的存储过程没有执行之前有break但你SET NOCOUNT ON这将导致-1ExecuteNonQuery返回。你在插入前是否运行SET NOCOUNT OFF

0

这里您在switch声明测试type

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. 
} 
相关问题