如果不存在,则在表格中插入一个值

时间:2010-03-01 12:50:05

标签: c# sql-server vb.net

使用SQL Server 2005,vb.net

表1

Name FromDate ToDate

Raja 12/02/2010 14/02/2010
Ravi 14/02/2010 15/02/2010
Ramu 18/02/2010 21/02/2010
...,

Insert into Table1 values('" & textbox1.text & "', '" & textbox2.text & "'. '" & textbox3.text & "'", con)

当我尝试在table1中插入一个值时,它将比较表值是否相同,它应该抛出一个错误信息“名称和日期已经存在”,否则插入一个值。

插入之前我想检查带有表值的文本框值。

任何人都可以为此提供样本想法或代码。

2 个答案:

答案 0 :(得分:3)

在T-SQL中:

IF EXISTS(SELECT * FROM dbo.Table1 WHERE Name = @Name AND FromDate = @FromDate AND ToDate = @ToDate)
   RAISERROR (N'Values already exist', 10, 1)
ELSE
   INSERT INTO dbo.Table1(Name, FromDate, ToDate)
   VALUES(@Name, @FromDate, @ToDate)

然后从VB.NET代码中的参数化查询中调用它。

有关RAISERROR的详细信息,请参阅MSDN文档:http://msdn.microsoft.com/en-us/library/ms178592.aspx。这里的值“10”是严重性,“1”是状态。您可以在MSDN文档中查看所有可用严重性和状态的列表。

或者将整个语句包装到处理所有这些内容的存储过程中,然后调用该存储过程。


<强>更新

创建存储过程:

CREATE PROCEDURE dbo.InsertData(@Name VARCHAR(50), @FromDate DATETIME, @ToDate DAETIME)
AS BEGIN
   BEGIN TRANSACTION

   IF EXISTS(SELECT * FROM dbo.Table1 WHERE Name = @Name AND FromDate = @FromDate AND ToDate = @ToDate)
      ROLLBACK TRANSACTION
      RAISERROR (N'Values already exist', 10, 1)
   ELSE
      INSERT INTO dbo.Table1(Name, FromDate, ToDate)
      VALUES(@Name, @FromDate, @ToDate)

      COMMIT TRANSACTION
END

然后从你的代码中调用它(我不熟悉VB.NET - 这是C#,但应该足够简单来翻译):

using(SqlConnection _con = new SqlConnection('your connection string here'))
{
    using(SqlCommand _cmd = new SqlCommand("InsertData", _con)
    {
        _cmd.CommandType = CommandType.StoredProcedure;

        // add parameters as necessary
        _cmd.Parameters.AddWithValue("@Name", "Your Name");
        _cmd.Parameters.AddWithValue("@FromDate", "20100101");
        _cmd.Parameters.AddWithValue("@ToDate", "20100331");

        try
        {
            // open connection, execute stored proc, close connection
            _con.Open();
            _cmd.ExecuteNonQuery();
            _con.Close();
        } 
        catch(SqlException sqlexc)
        {
            // handle SQL exception
        }
    }
}

很好地将所有内容封装到一个方法中 - 这对你有用吗?

答案 1 :(得分:2)

使用“IF NOT EXIST”命令

IF NOT EXISTS (SELECT * FROM Table WHERE YourContition) INSERT INTO Table (a,b) VALUES (@c1,@c2)