2017-05-16 53 views
2

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

這是什麼返回。我只需要返回值:

enter image description here

+0

你能準確地展示你所得到的嗎? – Snympi

+0

你在使用什麼樣的ORM?看起來是Dapper,但有些東西並不完全正確。 – Steve

+0

小巧。我添加了一個屏幕截圖。對不起,最初缺乏細節 – mrcavanaugh09

回答

2

由於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及其語言環境考慮將字符串轉換爲日期時間之間的不兼容問題。

2

你的回答是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'部分關閉你的連接。

希望這會有所幫助!

+1

連接在使用語句結束時是否關閉?整個事情會在我想的那個時候被垃圾收集。 – mrcavanaugh09

+0

這是香草的ADO.NET,它不是Dapper。 – Steve

+0

@ mrcavanaugh09也許會。我喜歡以離開連接的方式生活。如果連接在您運行此代碼時打開,那麼您可以讓任何給您開放連接的人自行關閉它。如果這個方法是打開連接的方法,那麼它應該是關閉它的人(只是爲了安全起見)。 –

相關問題