Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/339.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# 如何检查表中是否存在该名称_C#_Sql - Fatal编程技术网

C# 如何检查表中是否存在该名称

C# 如何检查表中是否存在该名称,c#,sql,C#,Sql,我是c#的新手,我对c#不太了解,但我还有任务要做 其想法是添加新员工,当用户单击add按钮时,必须检查数据库中的employee表中是否存在该名称,因此如果该名称存在,则不会将其添加到表中,如果不存在,则会将其添加到表中 那么,有谁能帮我一下吗:( 这就是页面设计的样子,如图所示: 我通过存储过程进行了检查,不知道它是否正确,并且有一个错误: @F_name nvarchar(50), @isExists bit output AS BEGIN -- SET NOCOUNT ON added

我是c#的新手,我对c#不太了解,但我还有任务要做

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

那么,有谁能帮我一下吗:(

这就是页面设计的样子,如图所示:

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

@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 
错误是:

Msg 102,15级,状态1,程序检查记录,第22行 靠近“END”的语法不正确


试试这个,只是在末尾添加了一个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 

您缺少一个
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 

我建议对代码隐藏使用此检查。您可以使用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();

您可以强制数据库不接受字段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
这是编写存储过程的方法。我想说的许多方法之一

因此,如果有任何F_名称,它将不会插入。如果需要,可以在
ELSE
语句中设置
UPDATE
逻辑


在“GO”之前再添加一条“END”语句只需使用SQL Server设置
Name
column unique keyr u??假设F_Name是名字而不是全名,我建议您使用其他名称进行“EXISTS”检查,因为名字不会提供足够的唯一值。如果电子邮件地址可用,请使用电子邮件地址,如果找不到其他唯一可识别的值,请使用combinati是的,我使用它,并使ID列主键为什么
Where().FirstOrDefault()
当您不需要该值时?当然
Any()
就足够了。当然,使用Any()就足够了,但在我的示例中,程序员可以在值不为null的情况下操作该值,将其添加到异常消息中,例如AddBtn\u Click()但在此之前,要使用LINQ,您需要通过添加“LINQ到SQL类”(dbml)文件来映射数据库数据。有没有其他不使用LINQ的方法?因为我对它一无所知,现在是学习新知识的好时机!;-)这是一个简单的steb分步教程,我不懂,你能解释更多吗?好的,我写了insert语句,但更新我怎么做?情况如何?使用更新的想法是什么?我可以写消息“名称已存在”而不是更新吗?
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