我在WPF C#应用程序内部的SQL Server上运行SQL查询。该查询返回一个字符串,其中包含我想要返回MYCOUNT
的名为GetNumber
的值。如何仅返回值MYCOUNT
以获取数字而不是整个字符串?
public string GetNumber(string SkillNumber)
{
DateTime dte = DateTime.Today;
string fixedStartDate = String.Format("{0:yyyy-MM-dd " + "05:00:00.000" + "}", dte);
string fixedEndDate = String.Format("{0:yyyy-MM-dd " + "05:00:00.000" + "}", dte.AddDays(1));
using (IDbConnection connection = new System.Data.SqlClient.SqlConnection(SQLHelper.CnnCal("OADB")))
{
var x = connection.Query($"SELECT COUNT(SOURCEID) AS 'MYCOUNT' "
+ "FROM [OADB].[oadb].[CmsCallHistory] "
+ "WHERE disposition = 2 and DISPSPLIT in (" + SkillNumber + ") AND SEGSTOP BETWEEN '" +
fixedStartDate + "' and '" + fixedEndDate + "'");
return x.ToString();
}
}
这就是回报。我只需要返回值:
答案 0 :(得分:2)
你的答案在msdn文档中: https://msdn.microsoft.com/en-us/library/system.data.idbconnection(v=vs.110).aspx
您可以尝试使用
for
另一个注意事项:完成后,您想尝试关闭连接。我建议将它放在try / catch / finally语句中,这样你就可以在'finally'部分关闭你的连接。
希望这有帮助!
答案 1 :(得分:2)
你得到一个错误,因为Dapper Query方法返回一个IEnumerable,而不是一个值(实际上你可以看到你返回的IEnumerable中有一个对象(一个int),这个对象的值为' 767&# 39)
在Dapper中,您可以使用 ExecuteScalar 在查询返回时获取单个标量值
var x = connection.ExecuteScalar<int>(.....)
您仍然可以使用Query方法,但使用Linq扭曲
var x = connection.Query(.....).Single();
关于Sql Injection的常见警告适用于您的代码,尽管parameterize an IN clause并非如此简单。并且这两个日期应该是明确的参数,以避免解析您认为是日期之间的不兼容性,而不是sql服务器及其语言环境考虑将字符串转换为日期时间。