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