尝试将SQL查询的值转换为字符串

时间:2017-05-16 19:56:40

标签: c# sql-server dapper

我在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();
    }
}

这就是回报。我只需要返回值:

enter image description here

2 个答案:

答案 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服务器及其语言环境考虑将字符串转换为日期时间。