Возврат значений из базы данных в WebMethod - PullRequest
0 голосов
/ 04 июля 2018

Мне нужно ввести какое-то значение в конец текстового поля и сохранить его в базе данных. Но если есть повторяющееся значение, оно не должно быть сохранено.

По сути, строка lvl успешно передается в WebMethod из внешнего интерфейса через ajax.

Процедура getDuplicate является простым выбором, который проверяет, есть ли значение lvl, уже сохраненное в базе данных. А процедура InsertObject вставляет значение в базу данных. Если значение (lvl) существует, то идентификатор этого значения возвращается и сохраняется в целом числе Count.

Проблема в том, что если Count возвращается с номером id, то если оператор работает, и если в базе данных нет значений, Count просто не получает никаких значений, а процедура завершается ошибкой и переходит прямо к части кода catch.

Я думаю, что есть проблема с возвращаемым типом из базы данных, когда в нем нет значения. Это не INT или что-то. Кто-нибудь может помочь, пожалуйста?

[WebMethod(EnableSession = true)]
            public static void GetCollection(string lvl)
            {

              string conn = ConfigurationManager.ConnectionStrings["Connection"].ConnectionString;
            using (SqlConnection connection = new SqlConnection(conn))

                try
                {
                    connection.Open();
                    SqlCommand cmdCount = new SqlCommand("getDuplicate", connection);
                    cmdCount.CommandType = CommandType.StoredProcedure;
                    cmdCount.Parameters.AddWithValue("@ObjekatName", lvl);
                    int count = (int)cmdCount.ExecuteScalar();

                    if (count > 0)
                    {

                    }
                    else
                    {
                        SqlCommand cmdProc = new SqlCommand("InsertObjekat", connection);
                        cmdProc.CommandType = CommandType.StoredProcedure;
                        cmdProc.Parameters.AddWithValue("@ObjekatName", lvl);
                        cmdProc.ExecuteNonQuery();
                        //strMsg = "Saved successfully.";
                    }

                }
                catch
                {


                }
                finally
                {
                    connection.Close();

                }

            return;

Процедура getDuplicate

ALTER PROCEDURE [dbo].[GetDuplicate]  

    @ObjekatName nvarchar(20)
    AS
    BEGIN

    SET NOCOUNT ON  
    SELECT TOP 1000 [ObjekatID]
      ,[ObjekatName]

  FROM [MyApp].[dbo].[Objekat]
  WHERE  ObjekatName = @ObjekatName
    END

1 Ответ

0 голосов
/ 04 июля 2018

Пожалуйста, измените ваш процесс GetDuplicate, как показано ниже. Он всегда будет возвращать значение.

CREATE PROCEDURE [dbo].[GetDuplicate]
@name nvarchar(20)
AS
BEGIN
    DECLARE @duplicateCount int
    SELECT @duplicateCount=count(*) FROM [dbo].[employee] WHERE name = @name
    RETURN @duplicateCount
END
...