获取数据库中最大的数值并加1返回,怎么做?
我数据库中有一个字段是外键,但该字段不是自动增长,而是通过时间获得一个字符串,对数据库中的该字段进行查询,返回最大值,该字段类型是char(100),返回后加一再写入数据库,但是C#类型有严格限制,无法进行转换,请教如何处理?
例如:
string exec=(string)sqlcmd.ExecuteScalar();//sqlcmd是sqlCommand对象实例,其他省略
由于返回的是string类型,想将返回的值加一好难,就是Int32 returnValue=(Int32)exec+1;
但失败,该字段存储的都是数字却仍然失败.
------解决方案--------------------count出来数据条数,然后在 int 转换 。在 + 1
------解决方案--------------------Convert.ToInt32()方法转换试试,再不行直接在SQL语句里转。
------解决方案--------------------string str = "select uid from tables1 order by uid desc ";
DataSet ds = new DataSet();
ds = myac.ExecuteSqlDs(str, "id ");
if (ds.Tables[ "id "].Rows.Count > 0)
id = Convert.ToInt32(ds.Tables[ "id "].Rows[0][0]) + 1;
然后再写进去就好了
------解决方案--------------------是不是数字太大了 或者用convert.toint64
Int64 returnValue=convert.toint64(exec)+1;
------解决方案--------------------string exec=(string)sqlcmd.ExecuteScalar();
int tmp = Convert.ToInt32(exec);
tmp = tmp+1;
//tmp写回数据库
------解决方案--------------------在数据库中转换 用convert或cast
------解决方案--------------------string exec=(string)sqlcmd.ExecuteScalar();//sqlcmd是sqlCommand对象实例,其他省略
由于返回的是string类型,想将返回的值加一好难,就是Int32 returnValue=(Int32)exec+1;
---------------------------
应该是你的sqlcmd返回的值不对,你的sql语句是什么
------解决方案--------------------在数据库里转,直接返回给C#
------解决方案--------------------在数据库中转换?
可以用convert,如:convert(decimal(18,0), '20070819 ')等
也可以取出你需要的部分,如天,小时等单独加一
------
我觉得你可能没有描述清楚
------解决方案--------------------select isnull(max(keyid),0) from news
------解决方案--------------------string exec=(string)sqlcmd.ExecuteScalar();
返回空值就出错误,说无法将类型为“System.DBNull”的对象强制转换为类型“System.String”。
怎样处理?
-------------------------------
string exec=Convert.ToString(sqlcmd.ExecuteScalar());
------解决方案--------------------我觉得,在数据库能转,在.net中也能转.在c#用Convert类转,在数据库convert()转.
------解决方案--------------------判断一下为空的情况。
------解决方案--------------------路过,顶一下
------解决方案--------------------在数据库写个函数不就OK了吗?为何要到前台来做?要是一笔记录都没有,就会出现DBnull的错误!
====返回表 ddzd中的下一个TO编号
ALTER function get_TONextno(@date datetime)
returns varchar(20)
as
begin
DECLARE @YEAR VARCHAR(2)
DECLARE @NEWNO VARCHAR(20)
SET @YEAR=SUBSTRING(CONVERT(VARCHAR(4),YEAR(@date)),3,2)
SELECT @NEWNO=MAX(ddbh) FROM dddd
WHERE SUBSTRING(ddbh,3,2)=@YEAR and ddbh like 'TO% ' and len(ddbh)=8
IF @NEWNO IS NULL
SET @NEWNO= 'TO '+@YEAR+ '0001 '
ELSE
SET @NEWNO= 'TO '+@YEAR+RIGHT( '000000 '+CONVERT(VARCHAR, CONVERT(BIGINT,SUBSTRING(@NEWNO,5,4))+1),4)
return @newno
end
------解决方案--------------------