2017-07-20 64 views
0

我是新來的C#編碼,這個網站,所以忍受着我。在按鈕上單擊我希望我的存儲過程執行並填充datagridview。當我運行應用程序並單擊按鈕時,我總是收到錯誤消息:沒有映射從對象類型存在System.Widows.Forms.DataGridViewTextBoxCell

「沒有從對象類型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]; 

回答

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(); 
       } 
      } 
     } 
+0

非常感謝你的工作 - 現在掛掉了一個時髦的錯誤。 「SqlDateTime溢出,必須在1/1/1753 12:00:00 AM和12/31/9999 11:59:59 PM之間」想知道你是否知道這件事? – hrutk1ta

+0

很高興工作。至於日期問題。到期日期是您擁有的唯一日期。你試圖插入的截止日期的價值是什麼?通常會發生這種情況,因爲DateTime的默認值是「1/1/0001 12:00:00 AM」,它超出了數據庫支持的日期範圍。 –

+0

有從我的SQL表中填充該字段的1000多個日期值。在SQL中,日期格式爲「2017-07-20 00:00:00.000」。當我執行應用程序並填充datagridview時,格式爲「2017/7/20 12:00:00 AM」。這可能是爲什麼? – hrutk1ta

相關問題