kva*_*cka 0 c# sql sql-server generics ienumerable
我有我只想返回一条记录的方法,但我不能使用FirstOrDefault. 与数据库的连接工作正常,我已经尝试过了。
我想找到传递一些值的记录。
这是我尝试过的:
public async Task<CorridoioWebResponse> GetCorridoiWeb_ID(string stab, string maga, string area, Int32 cors)
{
string strsql = string.Empty;
string strErrore = string.Empty;
string strConnessione = _configuration.GetConnectionString("ConnDB");
SqlServerCompiler compiler = new SqlServerCompiler();
CorridoioWebResponse coridoio;
using (IDbConnection cn = new SqlConnection(strConnessione))
{
using (var db = new QueryFactory(cn, compiler))
{
strsql = "SELECT * from tmhit.CORRIDOI_CORSIE WHERE STAB=" + stab + "AND MAGA =" + maga + "AND AREA=" + area + "AND CORS=" + cors;
//strsql = "SELECT top 1 STAB, MAGA, AREA, CORS from tmhit.CORRIDOI_CORSIE WHERE STAB=" + stab + "AND MAGA =" + maga + "AND AREA=" + area + "AND CORS=" + cors;
//SELECT top 1 STAB, MAGA, AREA, CORS from tmhit.CORRIDOI_CORSIE WHERE STAB = 1 and MAGA = 0 and AREA = 0 and CORS = 9
var _corridoio = await cn.QueryAsync<CorridoioWebResponse>(strsql);
if (_corridoio.Count() == 0)
throw new ToyotaException("Non ci sono corridoi mappati");
coridoio = _corridoio;
}
}
return coridoio;
}
Run Code Online (Sandbox Code Playgroud)
模型:
public class CorridoioWebResponse
{
public string stab { get; set; }
public string maga { get; set; }
public string area { get; set; }
public Int32 cors { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
它给我的错误:
无法将类型“System.Collections.Generic.IEnumerable<ModelSOme.Model_WebInterface.Mapatura.CorridoioWebResponse>”隐式转换为“ModelSomeModel_WebInterface.Mapatura.CorridoioWebResponse”。
此代码有两个问题 - 字符串连接以生成查询并IEnumerable<>在该方法仅返回单个项目时返回结果。
现在,您会收到编译错误。即使它被修复了,当文本值被注入到查询中时,你也会得到运行时错误。子字符串周围没有空格,因此整个 WHERE 子句将无效:WHERE STAB=123AND MAGA =345AND CORS=abc
用这个替换代码:
var strsql = "SELECT TOP 1 * from tmhit.CORRIDOI_CORSIE WHERE STAB=@stab AND MAGA=@maga AND AREA=@area AND CORS=@cors";
var _corridoio = await connection.QuerySingleOrDefaultAsync<CorridoioWebResponse>(
strsql,
new {stab,maga,area,cors});
Run Code Online (Sandbox Code Playgroud)
这将按名称传递参数值并返回第一个结果