c#调用存储过程出错,sql调用正确??为什么?

Eric__yang 2009-06-15 04:06:22
create proc Addhy
@xh char(15),
@xm varchar(50),
@sex char(5),
@xb varchar(50),
@bj varchar(30),
@sush char(10),
@lxfs varchar(15),
@bm varchar(50),
@zhw varchar(50),
@hf nvarchar(50),
@shj smalldatetime,
@shm nvarchar(200)
as
insert 会员表
values(@xh,@xm ,@sex,@xb,@bj,@sush,@lxfs,@bm,@zhw,@hf,@shj ,@shm)
go
Addhy 20072133524,小猪,男,文新系,null,null,null,组织部,null,null,null,null

这是存储过程,执行可以完成。
但是在visual studio 2008里面却发生错误:
INSERT 语句与 FOREIGN KEY 约束"FK_会员表_系别表"冲突。该冲突发生于数据库"社团管理系统",表"dbo.系别表", column '系别'。
语句已终止。
查了很长时间也没找到原因,请教高人?可能是什么问题……
下面是一部分c#源代码:
private void button1_Click(object sender, EventArgs e)
{
User user = new User();
string num = textBox2.Text.Trim();
string name = textBox1.Text.Trim();
string sex = comboBox1.Text.Trim();
string xb = comboBox3.Text.Trim();
string bj = textBox4.Text.Trim();
string sush = textBox6.Text.Trim();
string dh = textBox5 .Text.Trim ();
string bm = comboBox2.Text.Trim();
string zhw = textBox3.Text.Trim();
string hf = comboBox4.Text.Trim();
string shj = comboBox5.Text.Trim();
string shm = textBox7.Text.Trim();
user.AddUser(num, name , sex, xb,bj ,sush ,dh ,bm,zhw,hf,shj ,shm );
}

public void AddUser(string addnum,string addname ,string addsex,string addxb,string addbj ,string addsush ,string adddh ,string addbm,string addzhw,string addhf,string addshj ,string addshm )
{
SqlParameter apxh = new SqlParameter("@xh", SqlDbType.Char, 15);
apxh.Value = addnum;
SqlParameter apxm = new SqlParameter("@xm", SqlDbType.Char, 8);
apxm.Value = addname;
SqlParameter apsex = new SqlParameter("@sex", SqlDbType.Char, 2);
apsex.Value = addsex;
SqlParameter apxb = new SqlParameter("@xb", SqlDbType.Char, 2);
apxb.Value = addxb;
SqlParameter apbj = new SqlParameter("@bj", SqlDbType.Char, 2);
apbj.Value = addbj;
SqlParameter apsush = new SqlParameter("@sush", SqlDbType.Char, 2);
apsush.Value = addsush;
SqlParameter apdh = new SqlParameter("@lxfs", SqlDbType.VarChar, 15);
apdh.Value = adddh;
SqlParameter apbm = new SqlParameter("@bm", SqlDbType.Char, 15);
apbm.Value = addbm;
SqlParameter apzhw = new SqlParameter("@zhw", SqlDbType.VarChar, 15);
apzhw.Value = addzhw;
SqlParameter aphf = new SqlParameter("@hf", SqlDbType.VarChar, 15);
aphf.Value = addhf;
SqlParameter apshj = new SqlParameter("@shj", SqlDbType.VarChar, 30);
apshj.Value = addshj;
SqlParameter apshm = new SqlParameter("@shm", SqlDbType.VarChar, 50);
apshm.Value = addshm;

SqlParameter[] addparms = { apxh, apxm, apsex, apxb, apbj, apsush, apdh, apbm, apzhw, aphf, apshj, apshm };

string sp = "Addhy";

AccessDatabase.ExecuteNonQuery(AccessDatabase.ConnectionString, CommandType.StoredProcedure, sp, addparms);
}
...全文
67 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
iabswfg858 2009-07-03
  • 打赏
  • 举报
回复
顶顶顶顶
greenery 2009-06-29
  • 打赏
  • 举报
回复
不要用 SqlDbType.Char 类型啊,
长度设小了会被截断,设大了它又给你加空格,
你用 SqlDbType.Nvarchar(100),和你的表设计、存储过程类型要保持一致啊。
wadsunglow 2009-06-25
  • 打赏
  • 举报
回复
帮顶
iM臭皮匠 2009-06-23
  • 打赏
  • 举报
回复
外键设置不好是累赘
lidald 2009-06-19
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 yhy0145 的回复:]
SqlParameter apxb = new SqlParameter("@xb", SqlDbType.Char, 2);
apxb.Value = addxb;

这个参数的长度定义的不够吧,一个汉字占两个字节,你如果传’文新系‘,最后只会取第一个‘文’传到数据库,做insert 的时候,你的系别表里没有”文“这个系,所以报foreign key错。你把长度改一下试试
[/Quote]

13楼的仁兄说得有道理
terranhero 2009-06-18
  • 打赏
  • 举报
回复
晕死,用中文建数据库的?难道拼音不会吗?
yhy0145 2009-06-18
  • 打赏
  • 举报
回复
SqlParameter apxb = new SqlParameter("@xb", SqlDbType.Char, 2);
apxb.Value = addxb;

这个参数的长度定义的不够吧,一个汉字占两个字节,你如果传’文新系‘,最后只会取第一个‘文’传到数据库,做insert 的时候,你的系别表里没有”文“这个系,所以报foreign key错。你把长度改一下试试
yingzhilian2008 2009-06-15
  • 打赏
  • 举报
回复
帮顶一下 等待高手!
Eric__yang 2009-06-15
  • 打赏
  • 举报
回复
搞不明白啊!帮帮忙啊,各位大哥
winstonbonaparte 2009-06-15
  • 打赏
  • 举报
回复
去掉外键就可以正确插入数据库了?加上外键又不行?
这问题倒是怪的。这应该是外键的原因造成的
Eric__yang 2009-06-15
  • 打赏
  • 举报
回复
查了好几遍,可是参数传的是对的。而且,去掉外键之后我就可以添加上去了,并且各列值都是对的……问题出在哪呢?
Eric__yang 2009-06-15
  • 打赏
  • 举报
回复
下面是我会员表的代码:
CREATE TABLE [dbo].[会员表](
[学号] [char](15) NOT NULL,
[姓名] [varchar](50) NULL,
[性别] [char](5) NULL,
[系别] [varchar](50) NULL,
[班级] [varchar](30) NULL,
[宿舍] [char](10) NULL,
[联系方式] [varchar](15) NULL,
[部门名称] [varchar](50) NULL,
[职位] [varchar](50) NULL,
[会费] [nvarchar](50) NULL,
[加入时间] [smalldatetime] NULL,
[说明] [nvarchar](200) NULL,
CONSTRAINT [PK__会员表__7E6CC920] PRIMARY KEY CLUSTERED
(
[学号] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

GO
SET ANSI_PADDING OFF
GO
ALTER TABLE [dbo].[会员表] WITH CHECK ADD CONSTRAINT [FK_会员表_部门表] FOREIGN KEY([部门名称])
REFERENCES [dbo].[部门表] ([部门名称])
GO
ALTER TABLE [dbo].[会员表] CHECK CONSTRAINT [FK_会员表_部门表]
GO
ALTER TABLE [dbo].[会员表] WITH CHECK ADD CONSTRAINT [FK_会员表_系别表] FOREIGN KEY([系别])
REFERENCES [dbo].[系别表] ([系别])
GO
ALTER TABLE [dbo].[会员表] CHECK CONSTRAINT [FK_会员表_系别表]


winstonbonaparte 2009-06-15
  • 打赏
  • 举报
回复
你看下是不是你传进去的参数错了,有可能是你把系别的值传的是空值进去了
Eric__yang 2009-06-15
  • 打赏
  • 举报
回复
我把所有空都填了,可是问题依旧。而且系名在系别表里面是有的。string xb = comboBox3.Text.Trim();对应的是系别。
ai_li7758521 2009-06-15
  • 打赏
  • 举报
回复
C#中变量赋值的问题..
ai_li7758521 2009-06-15
  • 打赏
  • 举报
回复
textBox2.Text.Trim();在没内容的时候是''空字符串,而不是null。
Eric__yang 2009-06-15
  • 打赏
  • 举报
回复
在数据库中执行存储过程没有任何问题,在c#中才会出现这个错误
Jamin_Liu 2009-06-15
  • 打赏
  • 举报
回复
【系別】值在【社团管理系统】.dbo.系别表的【系别】列中沒有該對應值
jiangshun 2009-06-15
  • 打赏
  • 举报
回复
INSERT 语句与 FOREIGN KEY 约束"FK_会员表_系别表"冲突。该冲突发生于数据库"社团管理系统",表"dbo.系别表", column '系别'

你看看列“系别“这列的值和你的约束有什么冲突

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧