数据库内容:
id name
0 wawaOledbDataCommand dbComm=new OleDbDataCommand("select max(id) from tb_temp",myConn);
MessageBox.Show(dbComm.ExecuteScalar().GetType().ToString());
显示:System.Int16然后:
OledbDataCommand dbComm=new OleDbDataCommand("select max(id) from tb_temp",myConn);
MessageBox.Show(dbComm.ExecuteScalar().ToString());
显示:0然后:
OledbDataCommand dbComm=new OleDbDataCommand("select max(id) from tb_temp",myConn);
int maxid=(int)dbComm.ExecuteScalar();//在这里报错:指定的转换无效,使用long maxid=(long)dbComm.ExecuteScalar();也不行
MessageBox.Show(maxid.ToString());后又测试:
int i=0;
object objI=(object)0;
MessageBox.Show((int)objI);
又通过了
为什么?百思不解
id name
0 wawaOledbDataCommand dbComm=new OleDbDataCommand("select max(id) from tb_temp",myConn);
MessageBox.Show(dbComm.ExecuteScalar().GetType().ToString());
显示:System.Int16然后:
OledbDataCommand dbComm=new OleDbDataCommand("select max(id) from tb_temp",myConn);
MessageBox.Show(dbComm.ExecuteScalar().ToString());
显示:0然后:
OledbDataCommand dbComm=new OleDbDataCommand("select max(id) from tb_temp",myConn);
int maxid=(int)dbComm.ExecuteScalar();//在这里报错:指定的转换无效,使用long maxid=(long)dbComm.ExecuteScalar();也不行
MessageBox.Show(maxid.ToString());后又测试:
int i=0;
object objI=(object)0;
MessageBox.Show((int)objI);
又通过了
为什么?百思不解
或
Convert.ToInt32
System.Int16 ?
System.Int32 ?
int maxid=Convert.toInt32(dbComm.ExecuteScalar())应该可以过去
int maxid=(int)dbComm.ExecuteScalar();//在这里报错:指定的转换无效,使用long maxid=(long)dbComm.ExecuteScalar();也不行
MessageBox.Show(maxid.ToString());后又测试:
int i=0;
object objI=(object)0;
MessageBox.Show((int)objI);
这两种情况下的不同,就可以看出差异
1,类型转换失败会抛出异常InvalidCastException
2,只要类型转换成立,null值不会抛出异常Convert类转换特点:
1,null值不会抛出异常,比如Convert.ToString(null)会返回String.Empty
2,由于格式不对,可能会抛出FormatExceptionas类型转换运算符特点:
1,永远不会抛出异常
2,输入null值或者转换失败都会返回null
(typeName),此方法适合于类型,type.Parse, 此方法只适于类.NET中的数字类型,还有一种就是使用 Convert 类型来进行类型转换。
是否有类型转换的问题。
遇到过一次类似的问题是类型转换过程中长度的问题。
http://blog.csdn.net/dutguoyi/archive/2006/08/26/1122916.aspx
你直接在sql文中把max(id)转化为int,试试。