gpt4 book ai didi

c# - 异常无法将 nvarchar 转换为 int

转载 作者:行者123 更新时间:2023-11-30 18:23:30 26 4
gpt4 key购买 nike

我收到以下错误,尽管我已经检查了很多次我无法理解为什么当我只按字符串搜索时会弹出这样的东西,我已经检查过在属性下面填充本地对象时是否正确。

[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

异常(exception):

Test Name: TestSearchLocalNombre
Test FullName: UT.UnitTestLocales.TestSearchLocalNombre
Test Outcome: Failed
Test Duration: 0:00:00.0568857
Result Message:

Assert.Fail failed. System.Exception: Error: SQL Error: Error converting data type nvarchar to int.
at 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;
}

编辑2:

安全保障:

    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;
}
}
}

调试器;

enter image description here

已解决:

最终是人类的愚蠢和粗心导致了这整个难题,我感谢所有帮助我得出正确结论的人。

最佳答案

复制数据库的版本控制有问题,我正在使用一个过时的数据库。

关于c# - 异常无法将 nvarchar 转换为 int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32170205/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com