我看了类似的问题,但我仍然无法弄清楚它为什么不起作用......
我有这个古老的代码,就像一个魅力:
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",为什么它现在停止识别?
谢谢
答案 0 :(得分:-1)
您的声明是' userSidId',而您正在引用@SidID。我没有看到您对SidID'
进行移植的证据