2013-03-12 58 views
0

我是c#中的新成員,我對此不太瞭解,但我有任務必須完成。我如何檢查表中是否存在名稱

這個想法是添加新員工,當用戶點擊添加按鈕時,它必須檢查名稱是否存在於數據庫中的員工表上,所以如果名稱存在,它將不會添加在表上,如果不存在將是添加在桌子上。

所以請任何人可以幫助我在這:(

這是頁面設計將是什麼樣的這張照片:

enter image description here

我提出通過存儲過程和我的支票不知道這是否是正確的,也有一個錯誤:

@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 [email protected]_name) 
begin 
     set @isExists=1 
END 
GO 

的錯誤是:

Msg 102,Level 15,State 1,Procedure CheckRecord,Line 22 'END'附近語法錯誤。

+2

在「GO」之前添加一個「END」語句 – 2013-03-12 10:38:42

+0

只需使用SQL Server的「Name」列唯一鍵 – Sachin 2013-03-12 10:39:33

+0

? – 2013-03-12 10:40:29

回答

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 [email protected]_name) 
    begin 
     set @isExists=1 
    END 

END 

GO 
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 [email protected]_name) 
    begin 
     set @isExists=1 
    END 
END 
GO 
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 [email protected]_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(); 
+1

爲什麼Where()。FirstOrDefault( )'當你不需要價值?當然'Any()'就足夠了。 – 2013-03-12 10:51:06

+0

當然,使用Any()更充分,但在我的示例程序員可以操作值,如果它不爲空,將其添加到例外味精,即 – 2013-03-12 11:37:28

+0

抱歉,但此代碼將在哪裏?在按鈕添加? – omniah 2013-03-12 11:43:29

0

您可以強制數據庫穿上「T接受字段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 
+0

我不明白你可以解釋更多嗎? – omniah 2013-03-12 11:47:14

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。如果你願意,你可以在ELSE聲明中設置你的UPDATE邏輯。

+0

好吧,我寫插入語句,但更新我怎麼能做到這一點?以及使用更新的想法是什麼?我可以寫消息「名稱已經存在」而不是更新嗎? – omniah 2013-03-12 12:13:42