2011-02-17 169 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. 
} 
相關問題