批量插入SQL 本地数据库 不能与Dapper Plus一起使用

已加入
2020年1月16日
留言内容
19
编程经验
5-10
0
我正在尝试用名称填充数据库列"StockInTable" using Dapper Plus nugget package. My 库存 file is as below.
C#:
class Stockin
{
    [Key]
    public int ID { get; set; }
    public DateTime Date { get; set; }
    public string Sup_ID { get; set; }
    public string Sup_Name { get; set; }
    public string Prod_ID { get; set; }
    public string Prod_Name { get; set; }
    public DateTime Expiry { get; set; }
    public float Units { get; set; }
}

然后,我的SQL插入操作(使用Dapper)看起来像这样:
C#:
try
        {  DapperPlusManager.Entity<Stockin>().Table("StockinTable").Identity(x => x.ID);
            List<Stockin> 库存 = dataGridView1.DataSource as List<Stockin>;
            if (stockin != null)
            {
                using (IDbConnection db = new SqlConnection(ConnectionString);
                { db.BulkInsert(stockin);      }
                MessageBox.Show("Purchase Data Imported successfully!");
            }   MessageBox.Show("Stockin is still null or there is some issue!");
        }  catch (Exception ex)
        { MessageBox.Show(ex.Message, "Some error occurred! Please check parameters!", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }

但是无论何时执行代码,我什么都不会返回(即没有错误,但是我的列表没有填充,也没有任何内容插入数据库)。任何帮助/指导都非常感谢。顺便说一句,我正在填充我的"stockin" table using an excel sheet input (via EPPlus package) and that is working fine (i.e. I am displaying the 库存 table to DGV which shows the list perfectly).
 

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,447
位置
弗吉尼亚州切萨皮克
编程经验
10+
现在,我什至看到您的代码是如何编译的。您的#6行结尾缺少右括号。您确定运行的是正确版本的代码吗?

如果确定运行的是正确版本的代码,则在第6行和第7行上设置断点。在调试器中运行代码时断点命中吗?列表中的项目数是多少?
 
已加入
2020年1月16日
留言内容
19
编程经验
5-10
嗨,Skydiver,是的,在粘贴我的代码时,该括号被错误地丢失了。我很惊讶地看到,当我调试代码时,缺货或缺货清单已正确填充,但是一旦到达需要批量插入的位置,并且检查调试器,它就会显示有缺货或缺货(我有两个类似的过程)为NULL。我将分享更多相关的代码。

以下是我对两个列表的声明:
C#:
private ObservableCollection<Stockout> stockout = new ObservableCollection<Stockout>();
private ObservableCollection<Stockin> 库存 = new ObservableCollection<Stockin>();

And below is the method to populate the 库存 list.
C#:
if (ws.Cells[rowPurchase, colPurchase].Value != null)
                        {
                            Stockin 库存List = new Stockin();
                            库存List.ID = default;
                            库存List.Prod_ID = (ws.Cells[rowPurchase, colPurchase].Value).ToString();
                            库存List.Prod_Name = (ws.Cells[rowPurchase, colPurchase + 1].Value).ToString();
                            库存List.Date = Convert.ToDateTime(ws.Cells[rowPurchase, colPurchase + 2].Value.ToString());
                            库存List.Expiry = Convert.ToDateTime(ws.Cells[rowPurchase, colPurchase + 3].Value.ToString());
                            库存List.Sup_ID = ws.Cells[rowPurchase, colPurchase + 4].Value.ToString();
                            库存List.Sup_Name = ws.Cells[rowPurchase, colPurchase + 5].Value.ToString();
                            库存List.Units = float.Parse(ws.Cells[rowPurchase, colPurchase + 6].Value.ToString());
                            库存.Add(stockinList);
                        }
无法理解发生了什么事?
 

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,447
位置
弗吉尼亚州切萨皮克
编程经验
10+
I assume 库存 is put into the dataGridView1.DataSource.

Well, an ObservableCollection<T> is not a List<T>. Read about the as operator。以下行将返回空值。
C#:
List<Stockin> 库存 = dataGridView1.DataSource as List<Stockin>;
 
已加入
2020年1月16日
留言内容
19
编程经验
5-10
哦好的。非常感谢。所以我使用了错误的Collection类型。我现在已经将其重新声明为全局列表(我的初衷),并且很高兴它得到了通过。我的最后一个问题是我遇到与ID字段相关的错误,因为我收到传递给ID字段的值不能为NULL的错误。虽然我的目标领域是"ID AUTO-INCREMENT".
 
已加入
2020年1月16日
留言内容
19
编程经验
5-10
哦好的。非常感谢。所以我使用了错误的Collection类型。我现在已经将其重新声明为全局列表(我的初衷),并且很高兴它得到了通过。我的最后一个问题是我遇到与ID字段相关的错误,因为我收到传递给ID字段的值不能为NULL的错误。虽然我的目标领域是"ID AUTO-INCREMENT".
好了,现在也解决了。唯一的问题是我的SQL表中没有Identity(1,1)子句。当我更新它时,一切都变得固定了。
 
最佳 底部