C# 使用Dapper将供应商名称放入组合框
我对Dapper和C比较陌生。我试图在表单打开时将SQL数据库中的供应商名称输入到组合框中。 代码如下: 数据库表如下所示: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
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属性。