【问题标题】:c# stored procedure don't work [duplicate]c#存储过程不起作用[重复]
【发布时间】:2016-08-25 08:49:32
【问题描述】:

我使用存储过程来更新表,但它不起作用。 这里是:

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'

我确定这很简单,但我找不到。

感谢您的帮助

更新/解决方案:

在我的存储过程中使用上面的代码完成工作:

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 '+@Colonne+' = '+@Valeur+' where [Code article] = '+@CodeArticle+' and Division = '+@Division+' and LigneFab = '+@IDres+'';
EXECUTE sp_executesql @SQLString
END
GO

【问题讨论】:

  • 这是AccesBase.execute 的代码,我们需要回答这个问题。这个位 @Colonne = @Valeur 也永远不会起作用。
  • 您不能在 SQL 中参数化列 names。您通常也不需要。这通常表明数据模型错误并且相同类型的数据项最终位于不同的列中,而实际上它们应该都占用相同的列(但不同的行)
  • 单行 SQL 可能会起作用,但存储的过程不会。
  • 我编辑了我的问题并添加了我的工作更新程序,因为我无法在评论中复制它。那是我的错,我没有用好的关键字搜索。这里的解决方案:stackoverflow.com/questions/10092869/…

标签: c# sql sql-server stored-procedures


【解决方案1】:

问题出在这句话中

update dbo.[Ressources PDP] set @Colonne = @Valeur where [Code article] = @CodeArticle and Division = @Division and LigneFab = @IDres

你不能设置@Colonne=@Valeur

【讨论】:

    猜你喜欢
    • 2023-03-11
    • 2020-11-10
    • 1970-01-01
    • 2011-02-20
    • 2012-04-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多