Если не существует, то вставка значения в таблицу - PullRequest
0 голосов
/ 01 марта 2010

Использование SQL Server 2005, vb.net

Table1

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 ]

3 голосов
/ 01 марта 2010

В 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.

Или оберните весь оператор в сохраненный процесс, который имеет дело со всем этим, и просто вызовите этот сохраненный процесс.


UPDATE:

Создать сохраненный процесс:

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
        }
    }
}

Это красиво объединяет все в один метод - это работает для вас ??

2 голосов
/ 01 марта 2010

Используйте команду "ЕСЛИ НЕ СУЩЕСТВУЕТ"

IF NOT EXISTS (SELECT * FROM Table WHERE YourContition) INSERT INTO Table (a,b) VALUES (@c1,@c2)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...