从数据库返回值到WebMethod

时间:2018-07-04 10:56:25

标签: c# webmethod

我需要在文本框中输入一些值,最后将其保存到数据库中。 但是,如果存在重复的值,则不得保存该值。

基本上,字符串lvl已通过ajax从前端成功传递到WebMethod。

过程getDuplicate是一个简单选择,用于检查数据库中是否已经存储了lvl的值。然后InsertObject过程将值插入数据库中。 如果值(lvl)存在,则返回该值的ID并将其存储在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 :(得分:0)

请如下更改您的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