我遇到了问题。在我的情况下,我想选择max和+ 1以创建新的收据编号,如果是新收据,它将创建一个新编号,如下面的代码所示。但是,我收到了错误
无法将对象从DBNull强制转换为其他类型
这是我的代码。
这个系统在PDA上运行,所以我正在使用这个Web服务来调用数据库
public static CursorLoader getAlbumsByGenre(Context context, int genreId) {
Uri uri = MediaStore.Audio.Genres.Members.getContentUri("external", genreId);
String selection = MediaStore.Audio.Media.ALBUM + " IS NOT NULL) GROUP BY (" + MediaStore.Audio.Media.ALBUM;
return new CursorLoader(context, uri, null, selection, null, null);
}
******更新******
感谢所有的答案,SimpleVar提供了正确的答案,它解决了我的问题。再次感谢!
答案 0 :(得分:1)
试试这个:
object o = Data.DAL.ExecuteScalar(sql);
if (o is int)
{
return ((int)o + 1).ToString();
}
else
{
int receipt = 100000;
return receipt.ToString();
}
除此之外,您应该查看存储过程和准备好的查询。
对于递增密钥,您不应该使用任何一个,但使用自动递增id列的相应数据库功能。
答案 1 :(得分:1)
sql
永远不会是DBNull
,因为第一个是简单的刺痛,而不是查询的结果。发生此错误的原因是您希望将Data.DAL.ExecuteScalar(sql)
转换为int,如果ExecuteScalar
未返回任何内容(或特别是返回DBNull
),则该int将无效。
您必须针对DBNull
检查该方法的结果:
var o = Data.DAL.ExecuteScalar(sql);
int receiptno;
if (!(o is DBNull)) receiptno = Convert.ToInt32(o) + 1;
else receiptno = 100000;
return receiptno.ToString();
答案 2 :(得分:1)
答案 3 :(得分:0)
runn SELECT @@ ROWCOUNT 将返回您之前查询中受影响记录的数量