我正在使用Visual Studio的集成框架编写一些单元测试.我需要编写一些测试用例,在抛出适当的异常时传递.问题是我需要测试的异常是嵌套在更一般的异常中的内部异常.是否有一些简单的解决方案或我是否需要扩展整个功能.我目前正在使用[ExpectedException]属性,但在这种情况下它不会有很多好处.
我也很好奇当我们使用[ExpectedException]时会发生什么,而我们在测试中也有一些Assert逻辑.是否评估了条件(抛出异常并且Assert语句结果有效)或者在抛出正确的异常后立即通过测试?
我有一张包含产品的表格.我需要查询查找所有匹配结果到用户输入值.我SqlParameter
用于插入输入.
SqlCommand findProcutsByPattern = new SqlCommand(
"SELECT *" +
" FROM [Products]" +
" WHERE ProductName LIKE @pattern", connection);
findProcutsByPattern.Parameters.AddWithValue("@pattern", '%' + pattern + '%');
Run Code Online (Sandbox Code Playgroud)
当用户输入字符串包含'_'或'%'时,问题就出现了,因为它们被解释为特殊字符.另一方面,考虑到这一点:
命令对象使用参数将值传递给SQL语句或存储过程,从而提供类型检查和验证.与命令文本不同,参数输入被视为文字值,而不是可执行代码.
我不应该有这样的问题.我是否需要替换/转义输入字符串中的所有'_'和'%',或者是否有更优雅的解决方案.我希望输入被视为文字.
我在表中有一些记录,其中包括名称中的特殊字符(N_EW,N\EW,N%EW,N"EW,N'EW).指定\,"和'作为输入工作正常(考虑它们)作为文字).
因此,正如我们所知,对象(在当前示例中 - 字符串)相对于它们在堆中的引用进行比较.因此,如果:
string a = "something";
string b = "something";
bool isEqual = (a == b);
Run Code Online (Sandbox Code Playgroud)
将投入的值一个在字符串池中并找到的值后b是相同一同时通过池搜索,将指定相同的参考变量b.好的,这很清楚.但是如果发生了什么:
string a = "somethingNew";
bool isEqual = (a == "somethingNew");
Run Code Online (Sandbox Code Playgroud)
这些比较文字如何在内存中表示(如果有的话)以及在这种情况下如何完成整个比较过程?
我需要创建一个以供应商名称、开始日期和结束日期为参数的存储过程,并计算给定时间间隔内该供应商的总收入。我正在使用北风。该过程如下所示:
CREATE PROC usp_GetTotalIncomeByPeriod (
@companyName nvarchar(40),
@startDate date,
@endDate date)
AS
BEGIN
SELECT SUM(od.UnitPrice * od.Quantity * (1 - od.Discount))
FROM Orders o
JOIN [Order Details] od
ON o.OrderId = od.OrderId
JOIN Products p
ON od.ProductID = p.ProductID
JOIN Suppliers s
ON p.SupplierID = s.SupplierID
WHERE s.CompanyName = @companyName
AND (o.OrderDate BETWEEN @startDate AND @endDate);
END
GO
Run Code Online (Sandbox Code Playgroud)
问题是我实际上无法使用以下调用执行它:
EXEC dbo.usp_GetTotalIncomeByPeriod @companyName = 'Exotic Liquids',
@startDate = DATEFROMPARTS(1900, 01, 01),
@endDate = DATEFROMPARTS(2000, 1, 1);
Run Code Online (Sandbox Code Playgroud)
DATEFROMPARTS 函数本身似乎可以正常工作,但我无法使其作为参数工作。它不断给我“接近 1900 年的语法不正确”。我想念什么?
我有数字值,小数点后6位小数,我想存储在MSSQLServer中.但是,当我使用货币类型时,值会四舍五入到小数点后2-4位,我不希望这样.我应该使用什么数据类型?
c# ×3
sql-server ×3
sql ×2
date ×1
escaping ×1
sqldatatypes ×1
sqlparameter ×1
string ×1
t-sql ×1
unit-testing ×1