2010-11-11 73 views
1

你好,现在第一次玩SQL!C#.Net3.5添加数据到SQL Server 2005数据库如果它不存在,并且它更新它?

我有下面的代码工作正常,但我需要检查,如果条目已经在数据库中使用CustomerName和产品匹配,如果它在数据库中更新其他字段,如果不插入所有数据。

我该怎么做?

下面是我用它来插入新记录代码:

DateTime FirstDateSeen = new DateTime(); 
FirstDateSeen = DateTime.Now.Date; 

DateTime LastDateSeen = new DateTime(); 
LastDateSeen = DateTime.Now.Date; 

SqlConnectionStringBuilder MySqlConnection = new SqlConnectionStringBuilder("MY CONNECTION"); 
SqlConnection db = new SqlConnection(MySqlConnection.ToString()); 

try //sql string for first seen 
{ 
    string sqlIns = "INSERT INTO Customer (Product, Version, CustomerName, CustomerPostcode, FirstSeen, LastSeen)" + 
    "VALUES (@Product, @Version, @CustomerName, @CustomerPostcode, @FirstSeen, @LastSeen)"; 

    db.Open(); 
    SqlCommand cmdIns = new SqlCommand(sqlIns, db); 
    cmdIns.Parameters.Add("@CustomerName", UniqueA); 
    cmdIns.Parameters.Add("@Product", AppName); 
    cmdIns.Parameters.Add("@Version", AppVer); 
    cmdIns.Parameters.Add("@CustomerPostcode", UniqueB); 
    cmdIns.Parameters.Add("@FirstSeen", FirstDateSeen.ToShortDateString()); 
    cmdIns.Parameters.Add("@LastSeen", LastDateSeen.ToShortDateString()); 
    cmdIns.ExecuteNonQuery(); 

    cmdIns.Parameters.Clear(); 
    cmdIns.Dispose(); 
    cmdIns = null; 
} 
catch (Exception ex) 
{ 
    throw new Exception(ex.ToString(), ex); 
} 
finally 
{ 
    db.Close(); 
} 

回答

1
IF EXISTS(SELECT CustomerName FROM Customer WHERE CustomerName = @CustomerName) 
BEGIN 
    UPDATE Customer .. 
END 
ELSE 
BEGIN 
    INSERT INTO Customer (Product, Version, CustomerName, CustomerPostcode, FirstSeen, LastSeen) 
    VALUES (@Product, @Version, @CustomerName, @CustomerPostcode, @FirstSeen, @LastSeen) 
END 

很多其他有趣的东西会在这里......

这里是一个指针

catch (Exception ex) 
{ 
    throw new Exception(ex.ToString(), ex); 
} 

是更好,因为

catch (Exception ex) 
{ 
    // do stuff 
    throw; 
} 

catch() 
{ 
    throw; 
} 
+0

是否存在等所有的SQL命令的一部分? (这不是C#!!) – Adrian 2010-11-11 22:50:34

+1

@Adrian是的,人们给出的答案都是SQL(除了@ Hogan的异常捕获者的切线)。 – 2010-11-11 23:01:11

1

,而不是写在你的代码的SQL查询,您可以创建一个程序,并编写。并且在使用if else的过程中,您可以检查是否有条目,是否使用参数编写更新查询,或者编写插入查询。

2

你是否结婚了SQL 2005?如果没有,我会建议看看SQL 2008,因为它用MERGE命令解决了这个问题。 如果您处于无法使用SQL 2008的情况,那么只需将这些命令封装在更多的SQL代码中即可。

IF EXISTS (<Preform your Check>) 
BEGIN 
    Update ... blah blah 
END 
ELSE 
BEGIN 
    INSERT()... 
END 
0

首先执行一个查询这样的:

SELECT COUNT(*) AS RecordCount FROM Customer 
    WHERE [email protected] AND [email protected] 

如果RecordCount为0,使插入,如果不进行更新。

+1

'EXISTS()'是更好的 – Hogan 2010-11-11 22:38:47

+0

是的,使用EXISTS。它在满足条件的第一个记录中短路。 – DaveE 2010-11-12 00:53:00

相关问题