varchar值的转换' 359342067417520'溢出了一列int

时间:2017-07-29 07:27:45

标签: c# sql sql-server

我正在使用SQL Server作为数据库在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

现在这里的主表名为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 传递到我的数据库

我在 dr [" emeiNo"] = em1 [id] .ToString(); 此处

传递 359342067417520

这是我的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();

但是在我的执行行中我收到了错误

  

类型&#39; System.Data.SqlClient.SqlException&#39;的异常发生在System.Data.dll中但未在用户代码中处理

     

附加信息:varchar值的转换&#39; 359342067417520&#39;溢出了一个int列。

1 个答案:

答案 0 :(得分:0)

简而言之,您将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

此外,brandid列在数据库中为INT,但在表格类型中为VARCHAR(50),在C#中为string。修复它以使所有图层保持一致。