我收到以下错误,即使我已经多次检查我无法理解为什么当我只通过字符串搜索时会弹出这样的东西,我已经检查过,当填充Local属性下面的属性是正确的。
[TestMethod]
public void TestSearchLocalName()
{
try
{
IEnumerable lstLocales = gestor.searchLocal("Local1");
Assert.IsNotNull(lstLocales);
Console.Write("Se ha conseguido una lista de locales.");
}
catch (Exception ex)
{
Assert.Fail(ex.ToString());
}
}
gestor方法:
public IEnumerable<Local> searchLocal(String name)
{
try
{
return LocalRepository.Instance.getByName(name);
}
catch (DataAccessException ex)
{
throw ex;
}
catch (Exception ex)
{
throw new Exception(String.Format("Error: {0}", ex.Message));
}
}
存储库:
public IEnumerable<Local> getByName(String name) {
List<Local> lista = new List<Local>();
try
{
DataTable tablaResultado = DataBaseAccess.advanceStoredProcedureRequest("pa_local_buscar_nombre", new SPP[] {
new SPP("loc_nombre", name.ToString())
});
if (tablaResultado.Rows.Count > 0)
{
foreach (DataRow fila in tablaResultado.Rows)
{
lista.Add(new Local(
int.Parse(fila.ItemArray[0].ToString()),
fila.ItemArray[1].ToString(),
fila.ItemArray[2].ToString(),
fila.ItemArray[3].ToString(),
fila.ItemArray[4].ToString(),
int.Parse(fila.ItemArray[5].ToString()),
int.Parse(fila.ItemArray[6].ToString())
));
}
}
else
{
lista.Add(new Local());
}
}
catch (Exception ex)
{
throw new Exception(String.Format("SQL Error: {0}", ex.Message));
}
return lista;
}
当我在单元测试中使用相同的名称直接测试存储过程时,存储过程确实有效,这让我相信错误不在这里,只是以防万一:
CREATE PROCEDURE [dbo].[pa_local_buscar_nombre]
@loc_nombre as nchar(20)
AS
BEGIN
SET NOCOUNT ON;
SELECT
loc_id, loc_nombre, loc_url, loc_telefono,
loc_descripcion, loc_preferencia, loc_provincia
FROM
Locales
WHERE
loc_nombre LIKE '%' + @loc_nombre + '%'
END
例外:
测试名称:TestSearchLocalNombre
测试FullName:UT.UnitTestLocales.TestSearchLocalNombre
测试结果:失败 测试时间:0:00:00.0568857
结果消息:Assert.Fail失败。 System.Exception:错误:SQL错误:将数据类型nvarchar转换为int时出错 在BLL.GestorLocales.searchLocal(String name)
编辑:
高级存储过程:
public static DataTable advanceStoredProcedureRequest(String name, SPP[] parameters = null)
{
String storedProcedure = "dbo." + name;
SqlCommand cmd = new SqlCommand(name, getConection);
cmd.CommandType = CommandType.StoredProcedure;
if (parameters != null && parameters.Length > 0)
{
foreach (SPP p in parameters)
{
cmd.Parameters.AddWithValue("@" + p.Name, p.Value);
}
}
DataTable table = new DataTable();
SqlDataAdapter dataAdapter = new SqlDataAdapter(cmd);
dataAdapter.Fill(table);
return table;
}
EDIT2:
SSP:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DAL
{
public class SPP
{
public String Name { get; set; }
public String Value { get; set; }
/**
* Stored Procedure Parameter
*/
public SPP(String name, String value)
{
this.Name = name;
this.Value = value;
}
}
}
调试器;
解决:
最后是人类的愚蠢和羞怯导致了这整个难题,我感谢所有帮助我做出正确结论的人。
答案 0 :(得分:0)
版本控制存在重复数据库的问题,我正在使用过时的版本。