尝试获取SQL查询的值为一个字符串
我在我的WPF C#应用程序里面的SQL Server上运行SQL查询。该查询返回一个字符串,其中包含值MYCOUNT
,我想返回GetNumber
。如何返回值MYCOUNT
仅用于获取数字而不是整个字符串?尝试获取SQL查询的值为一个字符串
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();
}
}
这是什么返回。我只需要返回值:
由于Dapper查询方法返回的是IEnumerable而不是单个值(实际上,您可以看到在IEnumerable中返回了一个对象(一个int),并且该对象的值为'767'),您会收到错误
在小巧玲珑的,你可以使用的ExecuteScalar拿到一个标量值作为查询返回
var x = connection.ExecuteScalar<int>(.....)
您仍然可以使用查询方法,但有一个LINQ扭曲
var x = connection.Query(.....).Single();
关于Sql Injection的常见警告适用于您的代码,尽管parameterize an IN clause并不那么简单。这两个日期应该是明确的参数,以避免解析你认为是日期和SQL Server及其语言环境考虑将字符串转换为日期时间之间的不兼容问题。
你的回答是MSDN文档中: https://msdn.microsoft.com/en-us/library/system.data.idbconnection(v=vs.110).aspx
您可以尝试使用
using (IDbConnection connection = new System.Data.SqlClient.SqlConnection(SQLHelper.CnnCal("OADB")))
{
IDbCommand command = connection.createCommand();
command.CommandText = $"SELECT COUNT(SOURCEID) AS 'MYCOUNT' "
+ "FROM [OADB].[oadb].[CmsCallHistory] "
+ "WHERE disposition = 2 and DISPSPLIT in (" + SkillNumber + ") AND SEGSTOP BETWEEN '" +
fixedStartDate + "' and '" + fixedEndDate + "'";
return (string)command.ExecuteScalar();
}
另注:你想尝试完成后关闭连接。我建议把它放在try/catch/finally语句中,这样你就可以在'finally'部分关闭你的连接。
希望这会有所帮助!
连接在使用语句结束时是否关闭?整个事情会在我想的那个时候被垃圾收集。 – mrcavanaugh09
这是香草的ADO.NET,它不是Dapper。 – Steve
@ mrcavanaugh09也许会。我喜欢以离开连接的方式生活。如果连接在您运行此代码时打开,那么您可以让任何给您开放连接的人自行关闭它。如果这个方法是打开连接的方法,那么它应该是关闭它的人(只是为了安全起见)。 –
你能准确地展示你所得到的吗? – Snympi
你在使用什么样的ORM?看起来是Dapper,但有些东西并不完全正确。 – Steve
小巧。我添加了一个屏幕截图。对不起,最初缺乏细节 – mrcavanaugh09