【问题标题】:No Mapping Exists from Object Type System.Widows.Forms.DataGridViewTextBoxCell对象类型 System.Windows.Forms.DataGridViewTextBoxCell 不存在映射
【发布时间】:2017-07-20 12:12:50
【问题描述】:

我是 C# 编码和这个网站的新手,所以请多多包涵。在按钮上单击我希望我的存储过程执行并填充 datagridview。当我运行应用程序并单击按钮时,我不断收到一条错误消息:

“不存在从对象类型 System.Windows.Forms.DataGridViewTextBoxCell 到已知托管提供程序本机类型的映射。”

我该如何解决这个问题?我尝试将参数转换为它们的数据类型,这似乎也不起作用。我已经坚持了一段时间,并且正在努力在互联网上找到有关我的具体错误的任何信息。谢谢。

    private void button1_Click(object sender, EventArgs e)
    {
        SqlConnection sqlcn1 = new SqlConnection("My Server Connection String");
        sqlcn1.Open();

        //Stored Procedure
        SqlCommand sqlcmddel = new SqlCommand("My_Stored_Procedure", sqlcn1);
        sqlcmddel.CommandType = CommandType.StoredProcedure;
        sqlcmddel.ExecuteNonQuery();


        sqlcn1 = new SqlConnection("My Server Connection String");
        sqlcn1.Open();



        foreach (DataGridViewRow row in dataGridView1.Rows) ;

        SqlCommand sqlcmdins = new SqlCommand("My_Stored_Procedure", sqlcn1);

        //Stored Procedure


        sqlcmdins.CommandType = CommandType.StoredProcedure;
        sqlcmdins.Parameters.Add("@sugnum", SqlDbType.Int).Value = dataGridView1.Rows[Ournum].Cells[0];
        sqlcmdins.Parameters.Add("@sugtype", SqlDbType.NVarChar, 50).Value = dataGridView1.Rows[Ournum].Cells[1];
        sqlcmdins.Parameters.Add("@buyerid", SqlDbType.NVarChar, 50).Value = dataGridView1.Rows[Ournum].Cells[2];


        sqlcmdins.Parameters.Add("@duedate", SqlDbType.DateTime).Value = dataGridView1.Rows[Ournum].Cells[3];
        sqlcmdins.Parameters.Add("@xrelqty", SqlDbType.Float).Value = dataGridView1.Rows[Ournum].Cells[4];
        sqlcmdins.Parameters.Add("@purchasingfactor", SqlDbType.Float).Value = dataGridView1.Rows[Ournum].Cells[5];
        sqlcmdins.Parameters.Add("@relqty", SqlDbType.Float).Value = dataGridView1.Rows[Ournum].Cells[6];
        sqlcmdins.Parameters.Add("@jobnum", SqlDbType.NVarChar, 20).Value = dataGridView1.Rows[Ournum].Cells[7];
        sqlcmdins.Parameters.Add("@assemblyseq", SqlDbType.SmallInt).Value = dataGridView1.Rows[Ournum].Cells[8];
        sqlcmdins.Parameters.Add("@jobseq", SqlDbType.SmallInt).Value = dataGridView1.Rows[Ournum].Cells[9];
        sqlcmdins.Parameters.Add("@warehousecode", SqlDbType.NVarChar, 50).Value = dataGridView1.Rows[Ournum].Cells[10];
        sqlcmdins.Parameters.Add("@fob", SqlDbType.NVarChar, 50).Value = dataGridView1.Rows[Ournum].Cells[11];
        sqlcmdins.Parameters.Add("@shipviacode", SqlDbType.NVarChar, 50).Value = dataGridView1.Rows[Ournum].Cells[12];
        sqlcmdins.Parameters.Add("@termscode", SqlDbType.NVarChar, 50).Value = dataGridView1.Rows[Ournum].Cells[13];
        sqlcmdins.Parameters.Add("@vendornum", SqlDbType.Int).Value = dataGridView1.Rows[Ournum].Cells[14];
        sqlcmdins.Parameters.Add("@purpoint", SqlDbType.Int).Value = dataGridView1.Rows[Ournum].Cells[15];
        sqlcmdins.Parameters.Add("@linedesc", SqlDbType.NVarChar, 50).Value = dataGridView1.Rows[Ournum].Cells[16];
        sqlcmdins.Parameters.Add("@ium", SqlDbType.NVarChar, 10).Value = dataGridView1.Rows[Ournum].Cells[17];
        sqlcmdins.Parameters.Add("@unitprice", SqlDbType.Float).Value = dataGridView1.Rows[Ournum].Cells[18];
        sqlcmdins.Parameters.Add("@docunitprice", SqlDbType.Float).Value = dataGridView1.Rows[Ournum].Cells[19];
        sqlcmdins.Parameters.Add("@taxable", SqlDbType.Bit).Value = dataGridView1.Rows[Ournum].Cells[20];

【问题讨论】:

    标签: c# sql button stored-procedures datagridview


    【解决方案1】:

    您的问题是您试图将 Cell 传递到存储过程中。您需要传入单元格值。

    另外,因为你放了一个';'在 foreach 调用结束时,围绕行的循环没有做任何事情。假设您尝试插入 datagridview 中的所有行,您将需要这样的东西...

            using (SqlConnection sqlcn1 = new SqlConnection("My Server Connection String"))
            {
                sqlcn1.Open();
    
                //Stored Procedure
                using (SqlCommand sqlcmddel = new SqlCommand("My_Stored_Procedure", sqlcn1))
                {
                    sqlcmddel.CommandType = CommandType.StoredProcedure;
                    sqlcmddel.ExecuteNonQuery();
                }
    
                foreach (DataGridViewRow row in dataGridView1.Rows)
                {
                    using (SqlCommand sqlcmdins = new SqlCommand("My_Stored_Procedure", sqlcn1))
                    {
                        sqlcmdins.CommandType = CommandType.StoredProcedure;
    
                            //Stored Procedure
                        sqlcmdins.Parameters.Add("@sugnum", SqlDbType.Int).Value = row.Cells[0].Value;
                        sqlcmdins.Parameters.Add("@sugtype", SqlDbType.NVarChar, 50).Value = row.Cells[1].Value;
                        sqlcmdins.Parameters.Add("@buyerid", SqlDbType.NVarChar, 50).Value = row.Cells[2].Value;
    
    
                        sqlcmdins.Parameters.Add("@duedate", SqlDbType.DateTime).Value = row.Cells[3].Value;
                        sqlcmdins.Parameters.Add("@xrelqty", SqlDbType.Float).Value = row.Cells[4].Value;
                        sqlcmdins.Parameters.Add("@purchasingfactor", SqlDbType.Float).Value = row.Cells[5].Value;
                        sqlcmdins.Parameters.Add("@relqty", SqlDbType.Float).Value = row.Cells[6].Value;
                        sqlcmdins.Parameters.Add("@jobnum", SqlDbType.NVarChar, 20).Value = row.Cells[7].Value;
                        sqlcmdins.Parameters.Add("@assemblyseq", SqlDbType.SmallInt).Value = row.Cells[8].Value;
                        sqlcmdins.Parameters.Add("@jobseq", SqlDbType.SmallInt).Value = row.Cells[9].Value;
                        sqlcmdins.Parameters.Add("@warehousecode", SqlDbType.NVarChar, 50).Value = row.Cells[10].Value;
                        sqlcmdins.Parameters.Add("@fob", SqlDbType.NVarChar, 50).Value = row.Cells[11].Value;
                        sqlcmdins.Parameters.Add("@shipviacode", SqlDbType.NVarChar, 50).Value = row.Cells[12].Value;
                        sqlcmdins.Parameters.Add("@termscode", SqlDbType.NVarChar, 50).Value = row.Cells[13].Value;
                        sqlcmdins.Parameters.Add("@vendornum", SqlDbType.Int).Value = row.Cells[14].Value;
                        sqlcmdins.Parameters.Add("@purpoint", SqlDbType.Int).Value = row.Cells[15].Value;
                        sqlcmdins.Parameters.Add("@linedesc", SqlDbType.NVarChar, 50).Value = row.Cells[16].Value;
                        sqlcmdins.Parameters.Add("@ium", SqlDbType.NVarChar, 10).Value = row.Cells[17].Value;
                        sqlcmdins.Parameters.Add("@unitprice", SqlDbType.Float).Value = row.Cells[18].Value;
                        sqlcmdins.Parameters.Add("@docunitprice", SqlDbType.Float).Value = row.Cells[19].Value;
                        sqlcmdins.Parameters.Add("@taxable", SqlDbType.Bit).Value = row.Cells[20].Value;
    
                        sqlcmdins.ExecuteNonQuery();
                    }
                }
            }
    

    【讨论】:

    • 非常感谢它的工作 - 现在被一个时髦的错误挂断了。 “SqlDateTime 溢出。必须在 1/1/1753 12:00:00 AM 和 12/31/9999 11:59:59 PM 之间”想知道您是否对此有所了解?
    • 很高兴这有效。至于日期问题。截止日期是您拥有的唯一日期。您尝试插入的截止日期的值是多少?这种情况经常发生,因为 DateTime 的默认值是“1/1/0001 12:00:00 AM”,它超出了数据库支持的日期范围。
    • 我的 SQL 表中有 1000 多个日期值填充该字段。在 SQL 中,日期格式为“2017-07-20 00:00:00.000”。当我执行应用程序并填充 datagridview 时,格式为“7/20/2017 12:00:00 AM”。这可能是为什么?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-27
    • 2021-01-24
    • 1970-01-01
    • 1970-01-01
    • 2023-04-04
    相关资源
    最近更新 更多