2017-02-06 5 views
0
using System; 
using System.Collections.Generic; 
using System.Data.SqlClient; 
using System.Linq; 
using System.Web; 
using Dapper; 
namespace Calculate.Models 
{ 
    public class SelectedDetailsGetter 
    { 
     SqlConnection con = new SqlConnection("Data Source=CHANDAKG-01-L\\SQLEXPRESS;initial catalog=Calculator;integrated security=true"); 
     public IEnumerable<SelectedDetails> GetSelectedDetails(string Name) 
     { 

      string query = "SELECT * FROM DataNorm WHERE [email protected] AND year(DateMonth)=2014"; 
       var result = con.Query<SelectedDetails>(query,new { name = Name }); 
       return result; 
     } 
    } 
} 

このクエリは常にnullを返します。何か間違っていますか?誰もが使用することができますSingleOrDefault()このダッパークエリは常にnullを返します

+0

'GetSelectedDetails'は' null'を返すか、 'SingleOrDefault'を呼び出すと' null'を返すと言っていますか? – juharr

+0

GetSelectedDetails()はnullを返します。 –

+0

実際のプロバイダ名を「名前」に渡していますか? Provider = 'whomever'を使用してSSMSでそのクエリを実行すると、データが返されますか?私はあなたが何かを渡さないと、クエリによって何も返されないと仮定しています。クエリをデバッグします。それが "結果"のためにどのように生産されているかを見てください。また、 "SelectedDetails"の小道具はSQL列と同じ名前ですか? – Ethilium

答えて

1

まず、SingleOrDefault()関数は、もちろん存在する場合には、一意のレジスタを常に返します。クエリの結果が複数回行を返すときに、この場合は最初の問題のみが使用されます。

は今、

は必ず接続で動作するように、「使用」を使用して問題を解決し、その最良の方法は、あなたが閉じて開かれた接続を配置することを忘れないことを保証します。

オブジェクトConnectionをインスタンス化した後で、常に接続を開く必要があります。 githubから

public IEnumerable<SelectedDetails> GetSelectedDetails(string Name) 
      { 
       using (var con = new SqlConnection("Data Source=CHANDAKG-01-L\\SQLEXPRESS;initial catalog=Calculator;integrated security=true")) 
       { 
        con.Open(); 

        string query = @" SELECT * 
             FROM DataNorm 
             WHERE Provider= @name 
              AND year(DateMonth) = 2014 "; 

        var result = con.Query<SelectedDetails>(query, new { name = Name }); 

        return result; 
       } 
      } 
+1

実際に複数の結果がある場合、 'SingleOrDefault'は例外をスローします。 'FirstOrDefault'は、可能なゼロまたは複数行の最初の項目が必要な場合に使用します。 – juharr

+0

私はあなたのソリューション@ Gustavoを試してみました。それはまだ働いていません..まだNULLを返しています。私はこれに先立って呼び出されたメソッドでSQLに接続しています。 –

0

はこれを試してみてください

注:すべての拡張メソッドは、接続がすでに開かれていると仮定し、接続が閉じている場合、彼らは失敗します。

関連する問題