【问题标题】:Getting Error While Inserting Data to Table through Stored Procedure in C#通过 C# 中的存储过程向表中插入数据时出错
【发布时间】:2018-04-03 00:32:45
【问题描述】:

您好,我有一个表名客户,当我通过存储过程在此表中插入数据时,我收到错误:

存储过程如下:

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

alter procedure [dbo].[customerinsert_new]
(@cid int, @full_name varchar(50),@gender varchar(20),@DOB date,@age varchar(50),@marital_status varchar(20),@email varchar(50),@phone varchar(20),
@Country varchar(50),@State varchar(50),@City Varchar(50),@address varchar(100),@Height varchar(50),@weight varchar(50),@BMI varchar(50),    @Subscription int,@referral varchar(50),@joining_date date,@due_date date,
@amount_reccived varchar(50),@amount_left varchar(50),
@c_photo varchar(100),@primary_facility varchar(50),
@occupation varchar(50),@Medical_aliments varchar(200),
@know_about_sculpt varchar(50),@workout_history varchar(100),
@Fitness_goal varchar(50),@no_days_train_weekly varchar(50),
@no_hours_train_daily varchar(50),@heart_condition varchar(50),
@chest_pain varchar(50),@chest_pain_last_month varchar(50),
@lose_consciousness varchar(50),@bone_joint_problem varchar(50),
@Doctor_currently_prescribing_drugs varchar(50),
@other_reason_not_do_physical_activity varchar(50),
@emergency_name varchar(50),@emergency_relation varchar(50),
@emergency_contact varchar(50),@bid varchar(50),
@device varchar(20),@payment_remarks varchar(50),@orderno varchar(50),
@discount varchar(10),@famt varchar(50))

  as
  begin
  insert into customers values
  (@cid,@full_name,@gender,@DOB,@age,@marital_status,@email,@phone,@Country,     @State,@City,@address,@Height,@weight,@BMI,@Subscription,@referral,@joining_date,@due_date,@amount_reccived,@amount_left,@c_photo,@primary_facility,@occupation,@Medical_aliments,@know_about_sculpt,@workout_history, @Fitness_goal,  @no_days_train_weekly,@no_hours_train_daily,@heart_condition,@chest_pain,
  @chest_pain_last_month,@lose_consciousness,@bone_joint_problem,  @Doctor_currently_prescribing_drugs,@other_reason_not_do_physical_activity,
  @emergency_name,@emergency_relation,@emergency_contact,@bid,@device, @payment_remarks,@orderno,@discount,@famt)
  end

数据库设计如下:

CREATE TABLE [dbo].[customers](
    [id] [int] IDENTITY(1,1) NOT NULL,
    [cid] [int] NOT NULL,
    [full_name] [varchar](50) NOT NULL,
    [gender] [varchar](20) NOT NULL,
    [DOB] [date] NOT NULL,
    [marital_status] [varchar](20) NULL,
    [email] [varchar](50) NULL,
    [phone] [varchar](20) NULL,
    [Country] [varchar](50) NULL,
    [State] [varchar](50) NULL,
    [City] [varchar](50) NULL,
    [address] [varchar](200) NULL,
    [Height] [varchar](50) NULL,
    [weight] [varchar](50) NULL,
    [BMI] [varchar](50) NULL,
    [Subscription] [int] NULL,
    [referral] [varchar](50) NULL,
    [joining_date] [date] NULL,
    [due_date] [date] NULL,
    [amount_reccived] [varchar](50) NULL,
    [amount_left] [varchar](50) NULL,
    [c_photo] [varchar](500) NULL,
    [age] [varchar](50) NULL,
    [primary_facility] [varchar](50) NULL,
    [occupation] [varchar](50) NULL,
    [Medical_aliments] [varchar](200) NULL,
    [know_about_sculpt] [varchar](50) NULL,
    [workout_history] [varchar](100) NULL,
    [Fitness_goal] [varchar](50) NULL,
    [no_days_train_weekly] [varchar](50) NULL,
    [no_hours_train_daily] [varchar](50) NULL,
    [heart_condition] [varchar](50) NULL,
    [chest_pain] [varchar](50) NULL,
    [chest_pain_last_month] [varchar](50) NULL,
    [lose_consciousness] [varchar](50) NULL,
    [bone_joint_problem] [varchar](50) NULL,
    [Doctor_currently_prescribing_drugs] [varchar](50) NULL,
    [other_reason_not_do_physical_activity] [varchar](50) NULL,
    [emergency_name] [varchar](50) NULL,
    [emergency_relation] [varchar](50) NULL,
    [emergency_contact] [varchar](50) NULL,
    [bid] [varchar](50) NULL,
    [device] [varchar](20) NULL,
    [payment_remarks] [varchar](50) NULL,
    [orderno] [varchar](50) NULL,
    [discount] [varchar](10) NULL,
    [famt] [varchar](50) NULL,

我尝试通过探查器获取数据,并且我能够看到数据正确,但出现错误,请在探查器处查询:

exec customerinsert_new @cid='1079',@full_name='Testing',@gender='Male',@dob='2017-10-03',@age='25',@marital_status='Married',
@email='h@h.com',@phone='5',@country='India',@state='Haryana',@city='Asankhurd',@address='H.no. 720 Sector 9', @height='6.0',@weight='80',@BMI='23.92',@Subscription='3',@referral='Friend',@joining_date='2017-09-01',@due_date='2017-01-01',     @amount_reccived='1200',@amount_left='6800',@c_photo='10791.png',@primary_facility='Gym',@occupation='Na',@Medical_aliments='Na',
@know_about_sculpt='Friend',@workout_history='NA',@Fitness_goal='Fat Loss',@no_days_train_weekly='2',@no_hours_train_daily='1',     @heart_condition='No',@chest_pain='No',@chest_pain_last_month='No',@lose_consciousness='No',@bone_joint_problem='Yes',     @Doctor_currently_prescribing_drugs='No',@other_reason_not_do_physical_activity='No',@emergency_name='Mann',@emergency_relation='Na',     @emergency_contact='NA',@bid='2',@device='2',@payment_remarks='Cash',@orderno='INV2YQG2812OWX701XOE70112',@discount='0',@famt='8000'

在上面的查询中,bmi 是一个 varchar 数据类型字段,但我收到错误:

消息 245,级别 16,状态 1,过程 customerinsert_new,第 52 行 将 varchar 值“23.90”转换为数据类型 int 时转换失败。

对于加入日期,我收到日期数据类型错误:

消息 241,级别 16,状态 1,过程 customerinsert_new,第 52 行 从字符串转换日期和/或时间时转换失败。

以下insert命令插入数据成功:

insert into customers(cid,full_name,gender,DOB,marital_status,email,phone,Country,State,City,address,Height,weight,BMI,Subscription,referral,joining_date,
due_date,amount_reccived,amount_left,c_photo,age,primary_facility,occupation,Medical_aliments,know_about_sculpt,workout_history,Fitness_goal,no_days_train_weekly,
no_hours_train_daily,heart_condition,chest_pain,chest_pain_last_month,lose_consciousness,bone_joint_problem,Doctor_currently_prescribing_drugs,
other_reason_not_do_physical_activity,emergency_name,emergency_relation,emergency_contact,bid,payment_remarks,orderno,discount,famt)
 values('1079','Testing','Male','2017/10/23','Married','h@h.com','5','India','Haryana','Asankhurd','H.no. 720 Sector 9','6.0','80','23.90','3',
 'Friend','2017/09/11','2017/12/11','1200','6800','10791.png','25','Gym','Na','Na','Friend','NA','Fat Loss','2','1','No','No',
 'No','No','Yes','No','No','Mann','Na','NA','2','Cash','INV2YQG2812OWX701XOE70112','0','8000')

【问题讨论】:

  • 两个错误信息都非常简单明了。你希望我们怎么做?
  • 嗨 Zohar Peled,我只想知道为什么会出现这些错误,就像我通过 c# 在 sql server 中使用 insert 命令插入数据时,同样的数据插入成功。
  • 23.90 无法转换为int,并且您使用的任何字符串都无法转换为datedatetime。您希望我们为您调试吗?
  • 您好,使用insert命令插入数据时,记录插入成功。请在问题的最后检查插入命令。

标签: c# sql-server stored-procedures


【解决方案1】:

您的设计应该有一个非常好的理由...在您的几乎所有列中使用 varchar(xy) 将是一个很大的缺点...您应该始终将数据放置在适当的类型中!

工作命令和您发布的命令之间的区别在于明确说明的列列表。您应该永远不要依赖列以达到预期的顺序!没有SELECT * 也没有INSERT INTO SomeTable [VALUES|SELECT]

insert into customers values
(@cid,@full_name,@gender,@DOB,@age,@m

按照后面发布的命令中的正确顺序放置列名:

insert into customers(col1, col2, ...) values
(@cid,@full_name,@gender,@DOB,@age,@m ...

我很确定,表的 DDL 的列顺序不同。在c_photo 之后没有age。您没有将值插入到您认为应该执行的列中。

你最近换过桌子吗?在这种情况下,您的程序可能需要重新编译...

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多