c# 将数据类型 varchar 转换为 bigint 时出错

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c# 将数据类型 varchar 转换为 bigint 时出错相关的知识,希望对你有一定的参考价值。

(company.id='水蜜桃' or company.name like '%水蜜桃%')
如上想做到查询 company.id 是输入的值 或者满足 company.name 包含输入的值,该怎么写?

(company.id='水蜜桃' or company.name like '%水蜜桃%')
改为:
(cast(company.id as varchar)='水蜜桃' or company.name like '%水蜜桃%')
参考技术A 不要这样做,在拼接sql时做个判断
long tmp;
string input = "水蜜桃";
if(long.TryParse(input, out tmp))
sql += string.Format("(company.id=0 or company.name like '%0%')", tmp);
else
sql += "company.name like '%" + input.Replace("'", "''") + "%'";
参考技术B 告诉你个简单实用的方法,你学C#的应该肯定有装VS的,在VS里连接数据库可以生成sql语句的。你可以试试非常好用,点几下鼠标就OK。 参考技术C 检查一下你的字段里是否含有不可转换的文本数字,比如说中文全角数字!你可以在输入那里做判断或对键盘输入做控制或检查,以避免输入全角字符。
或者里面包含空格,这也是不可转换的,可以trim掉。
再就是字段类型是bigint,但赋的值是文本串,比如 '123' 不等于123。

将 varchar 转换为数字数据类型时出现算术溢出错误。找不到存储过程''。?

【中文标题】将 varchar 转换为数字数据类型时出现算术溢出错误。找不到存储过程\'\'。?【英文标题】:Arithmetic overflow error converting varchar to data type numeric. Could not find stored procedure ''.?将 varchar 转换为数字数据类型时出现算术溢出错误。找不到存储过程''。? 【发布时间】:2015-11-13 08:59:52 【问题描述】:

执行存储过程时出现此错误 (SP_StoredProcedure):

我的存储过程 (SP_StoredProcedure) 在执行之前从 VB.NET 收集了一些数据

dim TableName string = "Table1"
dim acctcode as string "Table1.acctcode"
dim month as integer = 1
dim year as integer = 2011

这是我从 VB.NET 执行存储过程 (SP_StoredProcedure) 的代码:

execute("EXECUTE SP_StoredProcedure '"& TableName &"','"& acctcode &"',"& month &","& year &"") 

这是我在SP_StoredProcedure上的代码:

CREATE PROCEDURE [dbo].[SP_StoredProcedure]
@TableName as varchar(100),
@AcctCode as varchar(100),
@Month as numeric(18,0),
@Year as numeric(18,0)

AS
BEGIN
DECLARE @Query as varchar(1000)
SET @Query = 
'UPDATE Table2 SET Dat = (SELECT Dat FROM '+ @TableName +' WHERE table2.acctcode = '+ @acctcode +' AND month = '+ @month +' AND year = '+ @year +') FROM Table2'
EXEC @Query
END

【问题讨论】:

SELECT SUM FROM 总和是什么? yearmonth 声明为Double 而不是int @Giorgi Nakeuri SUM 只是一个列名 如果SUM是列名,你应该把它放在[ ]中,像这样:[SUM] @NguyễnHảiTriều 这不是我的确切列名。我将更改示例以避免混淆。对不起 【参考方案1】:

在 varchar 字符串中进行动态查询时,需要转换数值,这对日期也很重要!否则,它不会正确附加到 @Query 变量。

另外,如果@acctcode 是一个varchar,那么您需要用额外的单引号对其进行转义,以便它能够像字符串一样正确处理它。

即..

SET @Query = ' UPDATE Table2 ' + 
             ' SET Dat = ( ' +
             '     SELECT Dat FROM ' + @TableName + 
             '     WHERE table2.acctcode = '''+ @acctcode +''' +
             '     AND month = ' + convert(varchar(18), @month) + 
             '     AND year = '+ convert(varchar(18), @year) +
             ' ) ' + 
             ' FROM Table2 '

【讨论】:

它给了我这个错误:The name ' UPDATE Table2 ' + ' SET Dat = ( ' + ' SELECT Dat FROM ' + @TableName + ' WHERE table2.acctcode = '+ @acctcode + ' AND month = ' + convert(varchar(18), @month) + ' AND year = '+ convert(varchar(18), @year) + ' ) ' + ' FROM Table2 ' is not a valid identifier. 对不起,我正在编辑它,现在尝试在需要转义的 @acctcode 周围加上额外的单引号。 只是@acctcode? @tablename 怎么样?我可以知道为什么吗? 所有字符串都被分配或测试,就像.. String = 'TEST' 它们用单引号括起来.. 对,基本 SQL。但是,当您添加表名时,这只是您要附加的文本。所以你不需要用单引号括起来,因为当你写一个普通的查询时,它不像 .. select * from 'TABLENAME' 对。

以上是关于c# 将数据类型 varchar 转换为 bigint 时出错的主要内容,如果未能解决你的问题,请参考以下文章

将 varchar 值“%”转换为数据类型 int 时转换失败

将varchar值'N'转换为数据类型smallint时,转换失败。

将 varchar 数据类型转换为 datetime 数据类型导致值超出范围的问题

将数据类型 varchar 转换为日期时将 int 年份转换为字符串时出错

将数据类型 varchar 转换为数字时出错。插入语句[重复]

将 varchar 值“AND ID =”转换为数据类型 int 时转换失败