2017-07-29 62 views
-3

我使用SQL Server作爲數據庫將varchar值「359342067417520」的轉換溢出int列

創造MVC-5 angularjs一個Web應用程序在一個地方,我正在將所有的移動我的詳細信息購買,我創建SQL Server中的用戶定義類型,看起來像這樣

CREATE TYPE [dbo].[TyDetails] AS TABLE 
(
    [transmid] [varchar](50) NULL, 
    [modelNumber] [varchar](50) NULL, 
    [Color] [varchar](50) NULL, 
    [productType] [varchar](50) NULL, 
    [emeiNo] [varchar](50) NULL, 
    [emeiNo2] [varchar](50) NULL, 
    [Uprice] [float] NULL, 
    [brandid] [varchar](50) NULL 
) 

和只讀存儲過程,它看起來像這樣

create proc [dbo].[Ins_details] 
    @tbl_data TyDetails readonly 
as 
begin 
    insert into tblTransactionD (TransactionMId, modelnumber, color, producttype, brandid, emeino, emeino2, price) 
     select * 
     from @tbl_data 
end 

現在主要表H ERE被命名爲tblTransactionD它看起來像這樣

CREATE TABLE [dbo].[tblTransactionD] 
(
    [TransactionDId] [int] IDENTITY(1,1) NOT NULL, 
    [TransactionMId] [varchar](100) NULL, 
    [ProductName] [varchar](50) NULL, 
    [ModelNumber] [varchar](50) NULL, 
    [Color] [varchar](50) NULL, 
    [ProductType] [varchar](50) NULL, 
    [BrandId] [int] NULL, 
    [EmeiNo] [varchar](50) NULL, 
    [EmeiNo2] [varchar](50) NULL, 
    [Qty] [int] NULL, 
    [Price] [float] NULL, 
    [ProductTax] [decimal](18, 2) NULL, 

    CONSTRAINT [PK_tblTransactionD] 
     PRIMARY KEY CLUSTERED ([TransactionDId] ASC) 
) ON [PRIMARY] 

我穿過數據表和TYPE數據到我的數據庫

我傳遞在博士[「emeiNo」] = EM1 [ID]的ToString();這裏

這裏是我的MVC的代碼

DataTable dt = new DataTable(); 
    dt.Columns.Add("transmid");// 
    dt.Columns.Add("modelNumber");// 
    dt.Columns.Add("color");// 
    dt.Columns.Add("productType");// 
    dt.Columns.Add("emeiNo");// 
    dt.Columns.Add("emeiNo2");// 
    dt.Columns.Add("Uprice");// 
    dt.Columns.Add("brandid"); 
    for (int id = 0; id < ps.Modelnumber.Split(',').Length; id++) 
    { 
     string[] mod = ps.Modelnumber.Split(','); 
     string[] col = ps.Color.Split(','); 
     string[] typ = ps.phoneType.Split(','); 
     string[] em1 = ps.emei.Split(','); 
     string[] em2 = ps.emei2.Split(','); 
     string[] pri = ps.Uprice.Split(','); 
     string[] act = ps.onetwo.Split(','); 
     DataRow dr = dt.NewRow(); 
     dr["modelNumber"] = mod[id].ToString(); 
     dr["color"] = col[id].ToString(); 
     dr["productType"] = typ[id].ToString(); 
     dr["emeiNo"] = em1[id].ToString(); 
     dr["emeiNo2"] = em2[id].ToString(); 
     dr["Uprice"] = Convert.ToDouble(pri[id].ToString()); 
     dr["transmid"] = getgu.ToString(); 
     dr["brandid"] = ps.brandid.ToString(); 
     dt.Rows.Add(dr); 
    } 
SqlCommand cm = new SqlCommand("Ins_details"); 
cm.ExecuteNonQuery(); 

,但在我執行行我收到錯誤

類型「System.Data.SqlClient.SqlException」的異常出現在System.Data.dll,但未在用戶代碼中處理

其他信息:varchar值「359342067417520」的轉換溢出了一個int列。

+3

int的最大值是'2,147,483,647' –

+3

專業提示:如果您有一個「數字」,並且對它進行數學運算沒有意義(例如一個電話號碼乘以另一個電話號碼),則將它們存儲爲字符串,而不是數字。 –

+0

您還可以在sql中使用bigint – PixelDev

回答

2

總之,你插入emeino這是字符串到brandid列是int。在存儲過程的INSERT命令中檢查您的列的順序。表格類型中的最後四列與您在過程中編寫的順序不同。

你應該改變SELECT * from @tbl_data實際編寫在同一順序您INSERT

insert into tblTransactionD (TransactionMId, modelnumber, color, producttype, brandid, emeino, emeino2, price) 
select transmid, modelnumber, color, producttype, brandid, emeino, emeino2, price  
from @tbl_data 

此外,brandidINT在數據庫中,但VARCHAR(50)表型和string在C#中的所有列。修復它通過所有圖層保持一致。

相關問題