Добавление собранных ошибок в базу данных - PullRequest
0 голосов
/ 16 декабря 2009

У меня есть приложение, которое отслеживает процесс и «изучает» исключения, добавляя их в БД.Процесс сбора ошибок / исключений довольно солидный, но не хранение на стороне БД.Я хочу сделать что-то вроде

public int GetErrorId(string StringToClassify)
{
sql = "SELECT [id] FROM [DBNAME].[dbo].[ERRORS] WHERE [ErrorString] = (@StringToClassify)";

   using (SqlConnection connection = new SqlConnection(ConnectionString))  
   {  
       SqlCommand cmd = new SqlCommand(sql, connection);  
       cmd.Parameters.Add("@StringToClassify", SqlDbType.VarChar);  
       cmd.Parameters["@StringToClassify"].Value = StringToClassify;  
       connection.Open();  
       Object result = cmd.ExecuteScalar();  
       if (result == null)  
           sysId = AddError(StringToClassify);  
       else  
           sysId = Int32.Parse(result.ToString());  
    }
}

Как реализовать функцию AddError (string s) ? Что-то, что вставляет запись и возвращает идентификатор вставленной записи?

1 Ответ

0 голосов
/ 16 декабря 2009

Если нет другой логики, которая зависит от того, существует строка или нет, почему бы не превратить ее в хранимую процедуру, которая выполняет INSERT, если она присутствует, или UPDATE, если ее нет? Затем верните идентификатор в любом случае.

Если вы используете SQL Server 2008, это прекрасная возможность использовать оператор MERGE .

Вот пример хранимой процедуры, использующей инструкцию MERGE, которая будет "upsert", измененная с этого примера .

CREATE PROC dbo.usp_VendorUpsert
(
     @stringID INT OUTPUT,
     @stringValue VARCHAR(80)
)
AS
BEGIN

     SET NOCOUNT ON;

     MERGE dbo.Errors as target
       USING (SELECT @stringValue) AS source(ErrorString)
       ON target.ErrorString = source.ErrorString

     WHEN NOT MATCHED THEN
     INSERT (ErrorString) VALUES (@stringValue)

     WHEN MATCHED THEN
     UPDATE SET @stringID = id;

     // Get the id from the insert or the update.
     SET @stringID = COALESCE(SCOPE_IDENTITY(), @stringID);

END

RETURN
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...