必须在sqlConnection执行中声明标量变量

时间:2018-03-12 06:53:38

标签: c# sql

我看了类似的问题,但我仍然无法弄清楚它为什么不起作用......

我有这个古老的代码,就像一个魅力:

    private void RegUser(DateTime firstActivity)
        {
            using (var conn = new SqlConnection(_connectionString))
                {

                    var userSidId = ActiveUsers.GetUserSerial();
                    var accountType = ActiveUsers.Value;
                        conn.Execute(@"
UPDATE TableUser SET
    AccountType=@AccountType,
    FirstActivity=@FirstActivity,
    WHERE SidID=@SidID
IF @@ROWCOUNT = 0
   INSERT INTO TableUser (SidID, AccountType, FirstActivity) VALUES (@SidID, @AccountType, @FirstActivity)
",
                            new {SidID = userSidId, AccountType = (int) accountType, FirstActivity = firstActivity});
                    }
                }
            }
        }

表上的较新版本TableUser可以有另一列(LastAccountType),因为我无法知道我正在运行的版本,我添加了一个动态sql来处理:

using (var conn = new SqlConnection(_connectionString))
                {

                    var userSidId = ActiveUsers.GetUserSerial();
                    var accountType = ActiveUsers.Value;
                        conn.Execute(@"
DECLARE @SQL AS VARCHAR(MAX)

UPDATE TableUser SET
    AccountType=@AccountType,
    FirstActivity=@FirstActivity,
    WHERE SidID=@SidID
IF @@ROWCOUNT = 0
    IF COL_LENGTH('dbo.TableUser', 'LastAccountType') IS NOT NULL
    BEGIN

    SET @SQL = 
    'INSERT dbo.TableUser
            ( SidID,
              AccountType,
              FirstActivity,
              LastAccountType
            )
    VALUES
            ( ' + CAST(@SidID AS nvarchar(12)) + ',
              ' + cast (@AccountType AS NVARCHAR(8)) + ',
              ''' + CONVERT (NVARCHAR, @FirstActivity, 126) + ''',
              0
            )'
    END ELSE
    BEGIN
     SET @SQL = 
    'INSERT INTO TableUser (SidID, AccountType, FirstActivity) VALUES (' + CAST(@SidID AS nvarchar(12)) + ', ' + cast (@AccountType AS NVARCHAR(8)) + ', ''' + CONVERT (NVARCHAR, @FirstActivity, 126) + ''')'
    END
EXEC(@SQL)
",
                            new {SidID = userSidId, AccountType = (int) accountType, FirstActivity = firstActivity});
                    }
                }

但我一直得到这个"必须声明标量变量@ SidID",为什么它现在停止识别?

谢谢

1 个答案:

答案 0 :(得分:-1)

您的声明是' userSidId',而您正在引用@SidID。我没有看到您对SidID'

进行移植的证据