系统类型的未处理异常.从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();
}
}
}
知道我做错了什么吗?
如果您多次添加相同的键,则可以在dictionary.Add
中获得ArgumentException
。密钥必须是唯一的。
您可以在T-SQL中使用SELECT lastname, MIN(photo) FROM table_name GROUP BY lastname
或ROW_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));