我需要在文本框中输入一些值,最后将其保存到数据库中。 但是,如果存在重复的值,则不得保存该值。
基本上,字符串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
答案 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