插入功能在计算特定cnic的记录时显示异常

时间:2013-12-16 10:01:57

标签: c# sql-server visual-studio ssms

我在带有插入功能的c#程序中遇到这个奇怪的错误。该函数是这样的:从文本框中获取cnic的值,并根据表中的列cnic进行检查,以检查表中存在的特定cnic的cnic的计数。目的基本上是避免在该专栏中重复使用cnic。在运行查询时,我得到一个异常:

nvarchar值'3410122878898'的转换溢出了一个int列

此值'3410122878898'与进入 67784 时的当前值无关。但是'3410122878898'是我在同一张表中的最后一行。这对我来说实际上很奇怪,因为我的表的数据类型如下:

[v_id]          BIGINT         IDENTITY (1, 1) NOT NULL,
    [cnic]          NVARCHAR (20)  NOT NULL,
    [name]          NVARCHAR (25)  NOT NULL,
    [Gender]        NCHAR (10)     NULL,
    [Address]       NVARCHAR (100) NULL,
    [email]         NVARCHAR (40)  NULL,
    [mob_no]        NVARCHAR (20)  NULL,
    [employer]      NVARCHAR (5)   NOT NULL,
    [mnl_reg_chk]   INT            NOT NULL,
    [black_lst_chk] INT            NOT NULL,
    CONSTRAINT [PK_visitor_1] PRIMARY KEY CLUSTERED ([v_id] ASC),
    CONSTRAINT [unique_cnic] UNIQUE NONCLUSTERED ([cnic] ASC),
    CONSTRAINT [FK_visitor_visitor_company] FOREIGN KEY ([employer]) REFERENCES [dbo].[visitor_company] ([comp_id])

cnic附近唯一的int是第一列id是主键,也是自动增量。

这是我抛出异常的代码:

String L_query = "Select COUNT(cnic) from visitor where visitor.cnic=" + cnic;
            command = connection.CreateCommand();
            command.CommandText = L_query;
            String count = command.ExecuteScalar().ToString();

上面的行 String count = ... 的执行是我首先提到的异常发生的地方。请帮我解决这个问题!我尽我所知解释了问题。

2 个答案:

答案 0 :(得分:0)

真的可以3410122878898返回的记录数量?然后你应该使用COUNT_BIG而不是COUNT ...

答案 1 :(得分:0)

如果3410122878898是字符串,则需要使用引号。

String L_query = 
string.Format("Select COUNT(cnic) from visitor where visitor.cnic='{0}'", cnic);