如何声明计数参数,然后在StringBuilder中插入数据之前对其进行检查
本文关键字:数据 插入 StringBuilder 进行检查 然后 声明 何声明 参数 | 更新日期: 2023-09-27 18:27:36
使用字符串生成器,在插入任何字段之前,我需要检查应用程序中3个字段中的文本是否已经在数据库表中的3个相应列中。
首先,我将3个字段中的文本放入名为LastName、StreetAddress和ZipCode的对象属性中。然后我创建了我的参数。当我这样做时:
var sb = new StringBuilder();
sb.Append("DECLARE @countLastName INT;");
sb.Append("DECLARE @countStreetAddress INT;");
sb.Append("DECLARE @countZipCode INT;");
sb.Append("SELECT @countLastName = COUNT (*) FROM tblCustomer WHERE LastName = @LastName;");
sb.Append("SELECT @countStreetAddress = COUNT (*) FROM tblCustomer WHERE StreetAddress = @StreetAddress;");
sb.Append("SELECT @countZipCode = COUNT (*) FROM tblCustomer WHERE ZipCode = @ZipCode;");
if (@countLastName < 1 || @countStreetAddress < 1 || @countZipCode < 1)
{
sb.Append("INSERT INTO tblCustomer (");
sb.Append("LastName, ");
sb.Append("StreetAddress, ");
sb.Append("ZipCode) ");
sb.Append("VALUES (@LastName, @StreetAddress, @ZipCode) ");
}
else
{
[Code that results in 1 of 3 messages being displayed to user based on which field is already in database. IE "LastName already exists"]
}
reader.CommandText = sb + "";
}
reader.Execute();
我把字符串生成器分配给了我的阅读器。CommandText,然后做了一个阅读器。Execute();,就像我对所有数据库点击所做的那样。
Visual Studio不喜欢我在IF语句中放入@count变量。每一条下面都有一条红色的歪歪扭扭的线。
那么,在插入值之前,我如何使用字符串生成器检查计数变量是否小于1呢?
谢谢!
好吧,您不能在StringBuilder中执行,但您可以更改命令以在SQL Server中执行整个逻辑。
例如,我会这样做(忽略哪一列是重复的):
IF(select COUNT (*) FROM tblCustomer WHERE LastName = @LastName or StreetAddress = @StreetAddress or ZipCode = @ZipCode) = 0 BEGIN
INSERT INTO tblCustomer (LastName, StreetAddress, ZipCode) VALUES (@LastName, @StreetAddress, @ZipCode)
END
使用ExecuteNonQuery方法执行此操作后,我将在返回值中获得受影响的行计数,并知道是否进行了任何插入。(注意,触发器可能会更改受影响的行数)
另一种方法是更改检查并选择结果值的命令(如0:ok、1:姓氏已存在、2:地址已存在等)。这样您就可以使用ExecuteScalar或ExecuteReader并获得所选值作为结果。
IF(select COUNT (*) FROM tblCustomer WHERE LastName = @LastName) > 0 BEGIN
SELECT 1
END ELSE IF(select COUNT (*) FROM tblCustomer WHERE StreetAddress = @StreetAddress) > 0 BEGIN
SELECT 2
END ELSE IF(select COUNT (*) FROM tblCustomer WHERE ZipCode = @ZipCode) > 0 BEGIN
SELECT 3
END ELSE BEGIN
INSERT INTO tblCustomer (LastName, StreetAddress, ZipCode) VALUES (@LastName, @StreetAddress, @ZipCode)
SELECT 0
END
第三种方法是创建一个SP来完成上面的整个逻辑。
这两种方法都不使用StringBuilder,StringBuilder是指定给命令的单个字符串。我想CommandText已经足够了。。