系统类型的未处理异常.从SQL表中创建c#字典时发生的参数异常

本文关键字:异常 字典 创建 参数 未处理 类型 SQL 系统 | 更新日期: 2023-09-27 18:04:28

所以我正在编写一个控制台应用程序,用于从SQLServer表(照片url)获取信息,然后迭代、下载和保存它们。现在我只是想让它从表中获取url并创建一个稍后可以引用的字典。这是我现在的代码,我一直得到一个错误,说"一个未处理的异常类型"系统。每当我尝试运行它时,第36行(注释掉)上的ArgumentException'发生在mscorlib.dll '中。

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

知道我做错了什么吗?

系统类型的未处理异常.从SQL表中创建c#字典时发生的参数异常

如果您多次添加相同的键,则可以在dictionary.Add中获得ArgumentException。密钥必须是唯一的。

您可以在T-SQL中使用SELECT lastname, MIN(photo) FROM table_name GROUP BY lastnameROW_NUMBER()OVER(PARTITION BY lastname ORDER BY lastname)之类的排序函数,或者在添加dictionary.ContainsKey之前检查它:

string lastname = read.GetString(0);
if(!photo.ContainsKey( lastname ))
    photo.Add(lastname, read.GetString(1));