Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 存储过程在SQL Management Studio中运行,但不在代码中运行_C#_C# 4.0_Stored Procedures_Ado.net - Fatal编程技术网

C# 存储过程在SQL Management Studio中运行,但不在代码中运行

C# 存储过程在SQL Management Studio中运行,但不在代码中运行,c#,c#-4.0,stored-procedures,ado.net,C#,C# 4.0,Stored Procedures,Ado.net,我在两个表中输入和更新数据,在SQl server中使用SP work创建查询是可以的,但是在C中查询表单会产生错误 以下是我的表格定义: CREATE TABLE [dbo].[nationality]( [nationalitycode] [int] IDENTITY(1,1) NOT NULL, [nationality] [nvarchar](50) NULL, CONSTRAINT [PK_nationality] PRIMARY KEY CLUSTER

我在两个表中输入和更新数据,在SQl server中使用SP work创建查询是可以的,但是在C中查询表单会产生错误

以下是我的表格定义:

CREATE TABLE [dbo].[nationality](
    [nationalitycode] [int] IDENTITY(1,1) NOT NULL,
    [nationality] [nvarchar](50) NULL,
        CONSTRAINT [PK_nationality] PRIMARY KEY CLUSTERED 
(
    [nationalitycode] 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
/****** Object:  Table [dbo].[user]   
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

-------------------------------------------------------------------------------------------
CREATE TABLE [dbo].[user](
    [code] [int] IDENTITY(1,1) NOT NULL,
    [name] [nvarchar](50) NULL,
    [lastname] [nvarchar](50) NULL,
    [nationalitycode] [int] NULL,
        CONSTRAINT [PK_user] PRIMARY KEY CLUSTERED 
(
    [code] 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
ALTER proc [dbo].[sp_insertdata]
@name nvarchar(50),
@lastname nvarchar(50),
@nationality nvarchar(50)
as
if  not exists(select * from nationality where nationality=@nationality)
begin
insert into nationality(nationality)values(@nationality)
end
declare @id int
select @id=nationalitycode from nationality where nationality=@nationality

insert into usuario(name,lastname,nationalitycode) values (@name,@lastname,@id)
当我运行以下代码编辑我得到的数据时:

Sqlexception未经处理过程或函数“sp_update”需要 未提供参数'@lastName'

这是我的编辑代码:

case menu.Edit:
   cmd.CommandText = "sp_update";
    cmd.Parameters.AddWithValue("code", txtCode.Text);
    cmd.Parameters.AddWithValue("name", txtName.Text);
    cmd.Parameters.AddWithValue("lastname", txtLastName.Text);
    cmd.Parameters.AddWithValue("nationality", txtNationality.Text);
    fila = cmd.ExecuteNonQuery();
    if (fila!=0)
    {
       MessageBox.Show("Update ok" +  cmd.Parameters["code"].Value.ToString());
    }
    break;
当我运行编辑代码时,我得到:

Sqlexception未经处理过程或函数“sp_update”需要 未提供参数'@lastName'

以下是存储过程定义:

CREATE TABLE [dbo].[nationality](
    [nationalitycode] [int] IDENTITY(1,1) NOT NULL,
    [nationality] [nvarchar](50) NULL,
        CONSTRAINT [PK_nationality] PRIMARY KEY CLUSTERED 
(
    [nationalitycode] 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
/****** Object:  Table [dbo].[user]   
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

-------------------------------------------------------------------------------------------
CREATE TABLE [dbo].[user](
    [code] [int] IDENTITY(1,1) NOT NULL,
    [name] [nvarchar](50) NULL,
    [lastname] [nvarchar](50) NULL,
    [nationalitycode] [int] NULL,
        CONSTRAINT [PK_user] PRIMARY KEY CLUSTERED 
(
    [code] 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
ALTER proc [dbo].[sp_insertdata]
@name nvarchar(50),
@lastname nvarchar(50),
@nationality nvarchar(50)
as
if  not exists(select * from nationality where nationality=@nationality)
begin
insert into nationality(nationality)values(@nationality)
end
declare @id int
select @id=nationalitycode from nationality where nationality=@nationality

insert into usuario(name,lastname,nationalitycode) values (@name,@lastname,@id)
/**************************************************/


您的insert存储过程和insert代码有问题。存储过程没有用于代码的参数,但您正在将其作为输入传递。您的代码应为:

case menu.New:
    cmd.CommandText = "sp_insertdata";
    cmd.Parameters.AddWithValue("@name", txtName.Text);
    cmd.Parameters.AddWithValue("@lastName", txtlastName.Text);
    cmd.Parameters.AddWithValue("@nationality", txtNationality.Text);
    cmd.Parameters["code"].Direction = ParameterDirection.Output;
    fila = cmd.ExecuteNonQuery();
Insert stored proc应包括代码作为输出:

ALTER proc [dbo].[sp_insertdata]
   @name nvarchar(50),
   @lastname nvarchar(50),
   @nationality nvarchar(50),
   @code int output
as
   if  not exists(select * from nationality where nationality=@nationality)
   begin
    insert into nationality(nationality)values(@nationality)
   end
   declare @id int
   select @id=nationalitycode from nationality where nationality=@nationality

   insert into usuario(name,lastname,nationalitycode) values (@name,@lastname,@id)

   SET @code=SCOPE_IDENTITY()
对于您的更新代码,我将更改为:

cmd.CommandText = "sp_update";
cmd.Parameters.AddWithValue("@code", txtCode.Text);
cmd.Parameters.AddWithValue("@name", txtName.Text);
cmd.Parameters.AddWithValue("@lastname", txtLastName.Text);
cmd.Parameters.AddWithValue("@nationality", txtNationality.Text);

很好的回答,现在我有另一个小问题来更新表单上的表,只显示在文本字段中。字段代码中记录的编号我可以删除代码编号并更新记录。。有没有办法解决这个问题?@Andreu:你的后续问题看起来超出了原来问题的范围,你可能想把它作为一个单独的问题来问。你可能还想重新措辞,因为我不知道你在问什么;记住,如果这个问题对你有用,就把它标记为已接受。