0

我是 C# 新手,我不知道更多,但我有任务要做。

这个想法是添加新员工,当用户单击添加按钮时,它必须检查名称是否存在于数据库中的员工表中,因此如果名称存在则不会添加到表中,如果不存在则添加到表中.

所以请任何人都可以帮助我:(

这就是页面设计的样子:

在此处输入图像描述

我通过存储过程进行了检查,我不知道它是否正确并且也有错误:

@F_name nvarchar(50),
@isExists bit output
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;

-- Insert statements for procedure here

 set @isExists = 0
if exists (SELECT F_name FROM Employee WHERE F_name =@F_name)
begin
       set @isExists=1
END
GO 

错误是:

消息 102,级别 15,状态 1,过程检查记录,第 22 行“END”附近的语法不正确。

4

5 回答 5

2

我建议对代码隐藏使用此检查。您可以使用 LINQ 轻松完成:

using(DataContext db = new DataContext())
{
    var name = db.Employee.Where(n => n.F_name == YourNameFromTextBox).FistOrDefault();
    if(name == null)
    {
        // insert data
    }
    else
    {
        // record exist - throw error
    }
}

如果您不想使用 LINQ,只需使用 ADO.NET 从 DB 读取/写入/更新:

SqlConnection dbConnection;
dbConnection = new SqlConnection(connectionString);

SqlCommand myCommand = new SqlCommand("SELECT * FROM Employee WHERE F_name=@F_name", dbConnection);
SqlParameter sqlParam = new SqlParameter("@F_name", F_name);
myCommand.Parameters.Add(sqlParam);

myCommand.Connection.Open();
SqlDataReader myReader = myCommand.ExecuteReader();

string name = "";

if (myReader.Read())
{
    name = myReader.GetString("F_name");
    // now you get 'name' from DB here, do your job
}
myReader.Close();
myCommand.Connection.Close();
于 2013-03-12T10:42:58.830 回答
0

试试这个,只是在最后添加了一个 END 语句

@F_name nvarchar(50),
@isExists bit output
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;

-- Insert statements for procedure here

 set @isExists = 0
if exists (SELECT F_name FROM Employee WHERE F_name =@F_name)
  begin
       set @isExists=1
  END

END

GO 
于 2013-03-12T10:39:49.097 回答
0

您缺少一个END语句,因为每个BEGIN语句都应该有END语句。

这将是:

@F_name nvarchar(50),
@isExists bit output
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;

-- Insert statements for procedure here

    set @isExists = 0
    if exists (SELECT F_name FROM Employee WHERE F_name =@F_name)
    begin
       set @isExists=1
    END
END
GO 
于 2013-03-12T10:40:33.970 回答
0

这就是您编写存储过程的方式。我想说的众多方式之一。

CREATE PROCEDURE proc_yourProcName
    @F_name nvarchar(50) 
AS
BEGIN
    IF NOT EXISTS(SELECT F_name FROM Employee WHERE F_name = @F_name)
        BEGIN
          -- Your INSERT statement here
        END
    ELSE
        BEGIN
         -- Your UPDATE statement here
        END
END

所以如果有任何 F_Name 它不会INSERT。如果你愿意,你可以在语句上设置你的UPDATE逻辑。ELSE

于 2013-03-12T10:52:14.600 回答
0

您可以强制数据库不接受 Employeename 字段中的重复项

或使用代码

try
con.open
cmd.commandtext="select * from T1 where name = '" & varablename &"'"
reader=cmd.excutereader
if reader.read
msgbox"the emp. is alrady founded in the database"
exit sub
else
' do the insertion
end if
catch ex as exception
msgbox ex.massege
end try
于 2013-03-12T10:43:09.223 回答