当我尝试执行它时,此代码会导致错误。
我的要求获得最新插入的增量ID
_connection.Open();
cmd.Connection = _connection;
cmd.CommandText = "Insert into Finalresult(Section_name, userId, examid) Select Section_name, User_id, Exam_id from result" +
"WHERE (User_id = '" + userid + "' Exam_id='" + examis + "' And Section_name='" + section + "')SELECT SCOPE_IDENTITY()";
Int32 newId = (Int32)cmd.ExecuteScalar();
行
发生错误Int32 newId = (Int32)cmd.ExecuteScalar();
错误是
System.Data.SqlServerCe.dll中发生了'System.Data.SqlServerCe.SqlCeException'类型的异常,但未在用户代码中处理
答案 0 :(得分:3)
您需要在此处进行一些更改,例如添加错误处理。要了解异常背后的原因,您需要检查异常的Errors
属性:
try
{
//Your code here
}
catch (SqlCeException e)
{
foreach (SqlCeError error in e.Errors)
{
//Error handling, etc.
MessageBox.Show(error.Message);
}
}
这样做,它会准确地告诉你错误是什么。
我认为您的User_id
和Exam_id
'参数'在SQL语句中被视为字符串,因为您用单引号将其包围起来。猜测,这将是你的问题以及WHERE子句中缺少逻辑运算符。
但是不要这样做参数化!当你以这种方式连接查询时,你会对SQL注入攻击开放。有关如何执行此操作的MSDN上有很多文章和信息,或者从Jeff Atwood看一下这些文章和信息 - http://blog.codinghorror.com/give-me-parameterized-sql-or-give-me-death/
<强>更新强>
好的,根据 marc_s 的评论进一步细分,你不能在SQL CE中使用SCOPE_IDENTITY()
。所以你正在考虑这样做:
参数化插页:
var sqlString = "Insert into Finalresult(Section_name, userId, examid) Select Section_name, User_id, Exam_id from result " +
"WHERE (User_id = @userId AND Exam_id = @examId AND Section_name = @sectionName"
cmd.CommandText = sqlString;
cmd.Parameters.Add("@userId", userid);
cmd.Parameters.Add("@examId", examId);
cmd.Parameters.Add("@sectionName", section);
cmd.ExecuteNonQuery();
然后在相同的连接上(当然是不同的命令),获取插入的ID:
cmd.Connection = _connection;
cmd.CommandText = "SELECT @@identity";
Int32 newId = (Int32)cmd.ExecuteScalar();
我没有对此进行测试或编译,因此请将其作为一个想法/指导。
答案 1 :(得分:0)
如果是userid,则Examids为int,则不要使用单引号。
cmd.CommandText = "Insert into Finalresult(Section_name, userId, examid) Select Section_name, User_id, Exam_id from result" +
" WHERE (User_id = " + userid + " Exam_id=" + examis + " And Section_name='" + section + "')SELECT SCOPE_IDENTITY()";
答案 2 :(得分:0)
您的查询中存在错误。试试这个:
cmd.CommandText = "Insert into Finalresult(Section_name, userId, examid) Select Section_name, User_id, Exam_id from result" +
" WHERE (User_id = '" + userid + "' AND Exam_id='" + examis + "' And Section_name='" + section + "')SELECT SCOPE_IDENTITY()";