使用 Dapper 将供应商名称放入组合框中

Getting Vendor Names into a combobox using Dapper

我对 Dapper 和 C# 都比较陌生。当表单打开时,我正在尝试将 SQL 数据库中的供应商名称放入组合框中。
这是代码: 数据库表是这样的:

CREATE table [dbo].[PURCH_VENDOR]   
([VENDOR_ID] varchar(20),  
      ,[VEND_NAME] varchar(20),  
      ,[VEND_ADDRESS] varchar(20),  
      ,[VEND_PHONE] varchar(20),   
      ,[VEND_WEBSITE] varchar(20),  
      ,[NOTES] varchar(20))    

供应商Class:

public class Vendor:IVendor
    {
        //properties
        public int ID;
        public string Name { get; set; }
        public string Address { get; set; }
        public string Phone { get; set; }
        public string Website { get; set; }
        public string Notes { get; set; }

        public static string ErrorMessage { get; set; }
        //Constructors
        public Vendor(string name,string address,string phone,string website,string notes)
        {
            Name = name;
            Address = address;
            Phone = phone;
            Website = website;
            Notes = notes;
        }
        public Vendor(string name)
        {
            Name = name;
        }
        public Vendor() { }
        public List<Vendor> GetVendors()
        {
            using (IDbConnection connection = new System.Data.SqlClient.SqlConnection(Helper.CnnVal("SAMPLEDB")))
            {
                var output = connection.Query<Vendor>("select vend_name from dbo.purch_vendor").ToList();
                return output;
            }
        }  

Form中的代码是这样的:

public partial class AddVendor : Form
    {
        //List<Vendor> vendor = new List<Vendor>();
        public AddVendor()
        {
            InitializeComponent();
            Vendor db = new Vendor();
            var outp = db.GetVendors();
            foreach (Vendor vd in outp)
            {
                cb_vendorName.Items.Add(vd.Name);//This is where the error kicks in
            }
            //IVendor vendorRep = new Vendor();
            //List<Vendor> vendor = vendorRep.GetAll();
            //foreach(var vend in vendor)
            //{
            //    //Console.WriteLine(vend.Name);
            //    cb_vendorName.Items.Add(vend.Name);
            //}
        } 
    } 

我得到的错误是:

An unhandled exception of type 'System.ArgumentNullException' occurred in System.Windows.Forms.dll

但我在供应商名称的数据库中没有任何 NULL 值。
在我调试时,它似乎认识到数据库中有两个条目,但没有填充任何成员属性。任何帮助,将不胜感激。 谢谢!

你似乎有两个问题。首先,有一个设计问题不会导致您遇到异常,但您应该以任何一种方式解决这个问题。 Vendor 是一个模型 class,应该只包含您列出的属性(加上构造函数)。在 Vendor class 中获取 Vendor 对象的列表本身并不是好的设计。您应该在另一个 class 甚至在填充 ComboBox 的主要 class 中执行此操作。

现在,针对您遇到的错误。通过使用 SQL 查询 select vend_name from dbo.purch_vendor,您只会得到一个无法映射到 Vendor class.[=18 中的任何属性的字段=]

因为 VEND_NAME 是您的数据库中目标列的名称 table purch_vendor,您也应该将其作为模型中的 属性 名称:

public string VEND_NAME { get; set; } // instead of Name

否则,制图引擎不知道要填充哪个字段。

如果您查看 this simple example,您可以看到列名称是 1:1 到模型 class 中的 属性 名称。这样,当您进行查询时,属性将被很好地填充。