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