C# 类型为';System.Data.SqlServerCe.SqlCeException';发生在System.Data.SqlServerCe.dll中,但未在用户代码中处理

C# 类型为';System.Data.SqlServerCe.SqlCeException';发生在System.Data.SqlServerCe.dll中,但未在用户代码中处理,c#,sql-server-ce,C#,Sql Server Ce,当我试图执行此代码时,它会导致一个错误 我的要求获取最新插入的增量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 = '

当我试图执行此代码时,它会导致一个错误

我的要求获取最新插入的增量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”类型的异常,但未在用户代码中处理


这里需要一些更改,比如添加错误处理。要获取异常背后的原因,您需要检查异常的
Errors
属性:

try
{
    //Your code here
}
catch (SqlCeException e)
{
    foreach (SqlCeError error in e.Errors)
    {
        //Error handling, etc.
        MessageBox.Show(error.Message);
    }
}
这样做,它将准确地告诉您错误是什么

我认为您的
User\u id
Exam\u id
“参数”在SQL语句中被视为字符串,因为您用单引号将其括起来。猜测一下,这将是您的问题,WHERE子句中缺少逻辑运算符

但是不要这样做参数化当您以这种方式连接查询时,会使自己受到SQL注入攻击。有很多关于MSDN的文章和信息介绍了如何做到这一点,或者看看Jeff Atwood的文章-

更新

好的,进一步细分一下,根据marc_s的评论,您不能在SQL CE中使用
SCOPE_IDENTITY()
。因此,您正在考虑这样做:

参数化插入:

然后在相同的连接上(当然是不同的命令),获取插入的id:


我还没有测试或编译过这个,所以把它作为一个想法/指导。

如果userid、examid是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()";

您的查询中有错误。试试这个:

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()";

User_id,Exam_id是整数?重复的-您不能在SQL Server CE中执行此操作-请参阅ErikEJ对另一个问题的回答以获取解决方案,Where子句“Where(User_id=”“+userid+”,Exam_id=“+examis+”,Section_name=“+Section+”)中缺少“And”)选择范围_IDENTITY();尝试此操作,但给出错误“解析查询时出错。[令牌行号=1,令牌行偏移量=110,令牌错误=(](编辑)已在结果“+”之间添加空格,其中…请立即重试
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()";
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()";