你不能用Webmatrix中的單個參數化查詢完成你的任務,並且在我看來,這不是一個好的解決方案創建一個連接參數的查詢。
一個更好的選擇可能是從表t1提取你所需要的記錄,並且與foreach循環將它們插入一個接一個:
@{
var userId = 25;
var examId = 32;
var sql1 = "SELECT TOP 10 QuestionID, QuestionStem FROM t1 ORDER BY NEWID()";
var sql2 = @"INSERT INTO tb2 (QuestionID, QuestionStem, UserID, ExamID)
VALUES (@0, @1, @2, @3)";
var db = Database.Open("yourDb");
var data = db.Query(sql1);
foreach (var row in data){
db.Execute(sql2, row.QuestionID, row.QuestionStem, userId, examId);
}
}
編輯
如果性能是一個真正的問題,也許最好的解決方案是將數據從Sql Server Compact遷移到Sql Server Express。
在這種環境下,你可以像
CREATE PROCEDURE AddQuestions @UserID int, @ExamID int
AS
INSERT INTO dbo.tb2 (QuestionID, QuestionStem, UserID, ExamID)
SELECT TOP 10 QuestionID, QuestionStem, @UserID AS UserID, @ExamID AS ExamID
FROM dbo.t2 ORDER BY NEWID()
GO
創建一個存儲過程,並在WebMatrix中調出:
@{
var userId = 14;
var examId = 16;
var db = Database.Open("yourDb");
var data = db.Execute("EXEC AddQuestions @UserID = @0, @ExamID = @1",
userId, examId);
}
來源
2014-01-30 10:14:46
GmG
它沒有工作。錯誤信息:此位置不允許有參數。確保'@'符號位於有效位置,或者該SQL語句中的參數有效。 描述:執行當前Web請求期間發生未處理的異常。請查看堆棧跟蹤以獲取有關該錯誤的更多信息以及源代碼的位置。 異常詳細信息:System.Data.SqlServerCe.SqlCeException:此位置不允許使用參數。確保'@'符號位於有效位置,或者該SQL語句中的參數有效。 – user3139268
我想你可以直接連接參數到字符串中,注意避免注入hack向量(應該很簡單,因爲它們都是整數值)。 – Polynomial