获取数据库中最大的数值并加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
------解决方案--------------------
编号的格式为:TO+年+3码流水号
[解决办法]
为空的时候你加1想得到什么值????????
如果为空就赋0就这样写
string exec=Convert.ToString(sqlcmd.ExecuteScalar());
Int32 returnValue = exec==String.empty ? 0 : Convert.ToInt32(exec);
[解决办法]
看一下从数据库里面查出来的数据是多少位的、再相应的转换(Convert)就可以了吧
[解决办法]
public string Increase(string number)
{
bool inc = true; // 设定进位
StringBuilder sb = new StringBuilder();
for (int i=number.Length-1;i> -1;i--)
{
int k = int.Parse(number[i].ToString());
if (inc)
k++;
if (k <10)
inc = false;
else
k=k%10;
sb.Insert(0,k);
}
if (inc)
sb.Insert(0,1);
return sb.ToString();
}
===========================
测试
Console.WriteLine(Increase( "1199920438 "));
Console.WriteLine(Increase( "1199920439 "));
Console.WriteLine(Increase( "999999 "));
Console.ReadKey();
结果
1199920438
1199920440
1000000
[解决办法]
看看我那个SQL嘛,转换成字符串也行:
select isnull(max(keyid), ' ') from news
[解决办法]
select max(uid)+1 from tables1
[解决办法]
SELECT COALESCE(MAX(NO)+1,1) AS NO FROM T
[解决办法]
有一个字段是外键,外健你不应该是写主表吗?直接加1 写不对吧
[解决办法]
Int32 returnValue = Int32.Parse(exec)+1;