2016-08-25 5 views
0

テーブルを更新するためにストアドプロシージャを使用しますが、動作しません。 ここにある:C#ストアドプロシージャが動作しません

ALTER PROCEDURE [dbo].[updateRessourceLigneFab] 
-- Add the parameters for the stored procedure here 
@CodeArticle nvarchar(300), 
@Division nvarchar(300), 
@Colonne nvarchar(300), 
@Valeur nvarchar(300), 
@IDres nvarchar(300) 
AS BEGIN SET NOCOUNT ON; 
update dbo.[Ressources PDP] set @Colonne = @Valeur where [Code article] = @CodeArticle and Division = @Division and LigneFab = @IDres 
END 
GO 

私はこのようなC#で、私のストアドプロシージャを呼び出しています:ここ

 public static DataTable updateRessourceLigneFab(string CodeArticle, string Division, string Colonne, string Valeur, string IDres) 
    { 
     String querystring = "[TipiakTTP].[dbo].[updateRessourceLigneFab]"; 
     var lsParam = new List<SqlParameter>(); 
     AccesBase.ajouteParametre(ref lsParam, CodeArticle, "@CodeArticle"); 
     AccesBase.ajouteParametre(ref lsParam, Division, "@Division"); 
     AccesBase.ajouteParametre(ref lsParam, Colonne, "@Colonne"); 
     AccesBase.ajouteParametre(ref lsParam, Valeur, "@Valeur"); 
     AccesBase.ajouteParametre(ref lsParam, IDres, "@IDres"); 
     return AccesBase.execute(querystring, lsParam); 
    } 

は私が私のストアドプロシージャを呼び出す関数を呼び出すために使用しているコードです:

private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e) 
    { 
     var grid = (DataGridView)sender; 
     if (grid[e.ColumnIndex, e.RowIndex].Value.ToString() != "") 
     { 
      string codearticle = grid[4, 0].Value.ToString() ; 
      string division = grid[3, 0].Value.ToString() ; 
      int y = int.Parse(getWeekNumberIncrement(Week)) - int.Parse(getDateNow())+1; 
      string val = "ress" + y.ToString(); 
      if (y < 10) 
      { 
       val = "ress0" + y.ToString(); 
      } 
      string colonne = "'"+ val +"'" ; 
      string valeur = grid[0, 0].Value.ToString() ; 
      string ligne = grid[5, 0].Value.ToString() ; 
      DataTable datagrid1 = Controller.Version.ControllerChoixVersion.getRessourceLigneFab(codearticle, division, ligne); 
      if (datagrid1.Rows.Count == 0) 
      { 
       Controller.Version.ControllerChoixVersion.insertRessourceLigneFab(codearticle, division, ligne); 
      } 
      Controller.Version.ControllerChoixVersion.updateRessourceLigneFab(codearticle, division, colonne, valeur, ligne); 
     } 

問題は、私のテーブルが更新されていない理由を私は知りませんということですが、私は多くのことを試してみましたが、私はまだそれを修正しようとしている。..

はについては、このSQL文が機​​能:

update dbo.[Ressources PDP] set ress01 = '111' where [Code article] = '10000100510' and Division = '1000' and LigneFab = 'RECONDI' 

を私は単純なものであると確信しているが、私はそれを見つけることができません。ヘルプ

UPDATE/SOLUTIONため

感謝:

ALTER PROCEDURE [dbo].[updateRessourceLigneFab] 
-- Add the parameters for the stored procedure here 
@CodeArticle nvarchar(300), 
@Division nvarchar(300), 
@Colonne nvarchar(300), 
@Valeur nvarchar(300), 
@IDres nvarchar(300) 
AS BEGIN DECLARE @SQLString NVARCHAR(500); SET NOCOUNT ON; 

     SET @SQLString = 'update dbo.[Ressources PDP] set '[email protected]+' = '[email protected]+' where [Code article] = '[email protected]+' and Division = '[email protected]+' and LigneFab = '[email protected]+''; 
EXECUTE sp_executesql @SQLString 
END 
GO 
+1

これに答える必要がある 'AccesBase.execute'のコードです。このビット「@Colonne = @ Valeur」も決して動かないでしょう。 – Jamiec

+5

SQLでは列*名前*をパラメータ化することはできません。また、一般的には必要ありません。通常、データ・モデルが間違っていて、同じタイプのデータ項目が異なる列で終了していることを示しています。実際にはすべて同じ列(ただし異なる行)を占有する必要があります。 –

+0

その1行のSQLが機能し、ストアドプロシージャは実行されません。 – DavidG

答えて

0

問題は、この文

update dbo.[Ressources PDP] set @Colonne = @Valeur where [Code article] = @CodeArticle and Division = @Division and LigneFab = @IDres 
である:私のストアドプロシージャに上記のコードを使用して

は、仕事をします

@ Colonne = @ Valeurは設定できません

関連する問題