2017-07-29 40 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#中的所有列。修复它通过所有图层保持一致。

相关问题