2013-12-16 51 views
0

我得到這個奇怪的錯誤在我的c#程序有插入功能。該函數是這樣的:從文本框中取出cnic的值,並將其與表中的列cnic進行覈對,以檢查表中針對該特定cnic的cnic的計數。目的基本上是爲了避免該專欄中的cnic的重複。當查詢正在運行,我得到一個例外是:插入函數顯示異常計數記錄特定cnic

的nvarchar的值「3410122878898」的轉換溢出int列

此值「3410122878898」不涉及當前的工作值爲進入。但是'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]) 

唯一INT附近CNIC是第一列的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(); 

字符串計數的執行= ...正上方就是發生異常時,我第一次提及。請幫助我解決問題!盡我所知,我已經解釋了問題。

+0

如果執行「SELECT COUNT(*)FROM ...」,會發生什麼情況? – PrfctByDsgn

+2

不應在查詢中引用cnic?不是'[cnic] NVARCHAR(20)不是NULL,'? – sanke

+1

甚至會更好使用參數(SqlParameter)... – PrfctByDsgn

回答

0

如果3410122878898是字符串,則需要使用引號。

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

不要忘記過濾_cinic_或使用SqlParameter作爲未過濾的容易受到SQL注入。 – sanke

0

可能3410122878898真的被返回的記錄數是多少?那麼你應該使用COUNT_BIG而不是COUNT ...