Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用Dapper将供应商名称放入组合框_C#_Combobox_Dapper - Fatal编程技术网

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

C# 使用Dapper将供应商名称放入组合框,c#,combobox,dapper,C#,Combobox,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_WE

我对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))    
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);
            //}
        } 
    } 
供应商类别:

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;
            }
        }  
表单中的代码如下所示:

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))    
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);
            //}
        } 
    } 
我得到的错误是:

发生“System.ArgumentNullException”类型的未处理异常 在System.Windows.Forms.dll中

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

你似乎有两个问题。首先,存在一个设计问题,它不会导致您遇到的异常,但无论如何您都应该解决它。供应商是一个模型类,应该只包含您列出的属性和构造函数。在Vendor类本身中获取Vendor对象的列表不是一个好的设计。您应该在另一个类中,甚至在填充组合框的主类中执行此操作

现在,转到您正在经历的错误。通过使用SQL查询select vend_name from dbo.purch_vendor,您只能得到一个无法映射到vendor类中任何属性的字段

由于VEND_NAME是DB表purch_vendor中目标列的名称,因此在模型中也应将其作为属性名称:

public string VEND_NAME { get; set; } // instead of Name
否则,映射引擎不知道填充哪个字段


如果查看,可以看到列名与模型类中的属性名的比例为1:1。这样,当您进行查询时,属性将被很好地填充。

了解哪一行引发该异常会很有帮助。此外,我相信数据库列名和属性名必须完全匹配,区分大小写;您的Vendor类没有vend_name属性。