2013-12-10 87 views
2

我必须插入一个值并在插入之前必须检查值是否存在。我怎样才能以简单的方式实现它?在插入之前检查值是否存在

public int AddCountry(string cntName) 
{ 
    try 
    { 
     if (conn.State == ConnectionState.Closed) 
     { 
      conn.Open(); 
     } 

     SqlCommand sqlCmd = new SqlCommand("INSERT INTO Country VALUES(" + 
      cntName + ")", conn); 
     sqlCmd.Parameters.AddWithValue("@Country_Name", cntName); 
    } 
    catch (Exception) 
    { 
     throw; 
    } 
} 
+4

两个备注:1)你真的了解如何使用这个异常处理的事情吗? 2.)[小Bobby表](http://imgs.xkcd.com/comics/exploits_of_a_mom.png)。 –

+1

就像@UweKeim指出的那样,你的try/catch代码是完全多余的,它复制了C#在遇到错误时已经做的事情:再次抛出它。 – Tobberoth

+0

我会在catch异常中显示一条消息...是否正确? –

回答

4

忽略了你的代码中的其他问题,你应该看看IF NOT EXISTS

IF NOT EXISTS 
    (
    SELECT 1 
    FROM Country 
    WHERE Country_Name = @countryName 
    ) 
INSERT INTO Country (Country_Name) values (@countryName) 
3

首先要做的是将插入SQL移动到存储过程中。这会给你2个好处 - 一个数据库调用来完成这项工作,它将摆脱你提供的代码中的SQL注入问题。

然后在存储过程中,检查插入前的值。

DECLARE @count INT 
SELECT @count = COUNT(*) FROM Country WHERE Name = @countryName 
IF @count <= 0 BEGIN 
// INSERT HERE 
END 
+0

如果它已经存在,会不会插入它? – RoughPlace

+0

@Yakyb - 感谢您发现错误,更正了IF语句! –

相关问题