2016-08-29 3 views
-4

SQLServerテーブル(写真URL)から情報を取得し、繰り返し、ダウンロードして保存するコンソールアプリケーションを作成しています。今は、テーブルからURLを取得し、後で参照できる辞書を作るようにしようとしています。これは私が今使っているコードです。私は試してみると「36行目(コメントアウト)の "mscorlib.dllで未処理の例外 'System.ArgumentException'が発生しました。SQLテーブルからC#ディクショナリを作成中にSystem.ArguementException型の未処理の例外が発生しました。

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Data; 
using System.Data.SqlClient; 

namespace PictureDownloader 
{ 
    class Program 
    { 
     static void Main() 
     { 
      Program nd = new Program(); 
      nd.getURLS(); 
     } 

     public void getURLS() 
     { 
      SqlConnection sid = new SqlConnection("Connection String"); 
      sid.Open(); 
      Dictionary<string, string> photo = new Dictionary<string, string>(); 
      SqlCommand cmd = new SqlCommand("select lastname, photo from table_name where photo is not null", sid); 

      SqlDataReader read = cmd.ExecuteReader(); 
      if (read.HasRows) 
      { 
       while (read.Read()) 
       { 
        //photo.Add(read["lastname"].ToString(), read["photo"].ToString()); 
       } 
      } 

      foreach (KeyValuePair<string,string> dr in photo) 
      { 
       Console.WriteLine(dr.Key.ToString() + " = " + dr.Value); 
      } 
      sid.Close(); 
     } 
    } 
} 

私は間違っていると思いますか?

+0

を完全なスタックトレースを追加してください。 –

+3

http://idownvotedyoubecause.com/so/NoException詳細 – Will

+0

'lastname'と' photo'が 'string'ですか? – anatol

答えて

1

同じキーを複数回追加すると、dictionary.AddArgumentExceptionが表示されます。キーは一意でなければなりません。あなたはそれを追加する前にdictionary.ContainsKeyでそれを追加する前に

あなたは、T-SQLでROW_NUMBER()OVER(PARTITION BY lastname ORDER BY lastname)ようSELECT lastname, MIN(photo) FROM table_name GROUP BY lastnameやランキング機能を使用するか、それを確認することができます。

string lastname = read.GetString(0); 
if(!photo.ContainsKey(lastname)) 
    photo.Add(lastname, read.GetString(1)); 
関連する問題