对象类型System.Widows.Forms.DataGridViewTextBoxCell中没有映射

时间:2017-07-20 12:12:51

标签: c# sql button stored-procedures datagridview

我是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];

1 个答案:

答案 0 :(得分:0)

您的问题是您正在尝试将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();
                }
            }
        }