2017-03-05 74 views
0

我試圖在Visual Studio 2015(社區版)中保存來自Web窗體的數據。我一再得到錯誤:在向表中添加數據時在com.ExecuteNonQuery()中獲取錯誤

no mapping exists from object type. Error at line "com.ExecuteNonQuery()". 

我已經嘗試了各種解決方案在此論壇中提到,但他們都沒有爲我工作。請幫忙。謝謝。

錯誤消息:

我的代碼

protected void Page_Load(object sender, EventArgs e) 
    { 
     if (IsPostBack) 
     { 
      SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["RegistrationConnectionString"].ConnectionString); 
      conn.Open(); 
      string checkuser = "select count(*) from [Table] where Username='" + un.Text + "'"; 
      SqlCommand com = new SqlCommand(checkuser, conn); 
      temp = Convert.ToInt32(com.ExecuteScalar().ToString()); 
      if (temp == 1) 
      { 
       Response.Write("User already exists"); 
      } 

      conn.Close(); 
     } 
    } 
    protected void Button1_Click(object sender, EventArgs e) 
    { 
     if (temp == 0) 
     { 
      try 
      { 
       SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["RegistrationConnectionString"].ConnectionString); 
       conn.Open(); 
       string insertquery = "insert into [Table] (Designation, Username, Email, [Password]) values (@Designation, @Username, @Email, @Password)"; 
       SqlCommand com = new SqlCommand(insertquery, conn); 
       com.Parameters.AddWithValue("@Designation", dn.SelectedItem.ToString()); 
       com.Parameters.AddWithValue("@Username", un.Text); 
       com.Parameters.AddWithValue("@Email", em.Text); 
       com.Parameters.AddWithValue("@Password", pw.Text); 
       com.ExecuteNonQuery(); 
       Response.Redirect("Managers.aspx"); 
       Response.Write("Registration Successful"); 
       conn.Close(); 
      } 
      catch (Exception ex) 
      { 
       Response.Write("error :" + ex.ToString()); 
      } 
     } 
    } 
} 

回答

0

由於上述錯誤,似乎由於對象類型轉換無效。

主要區別在於使用AddWithValue時的隱式轉換。如果您知道正在執行的SQL查詢(存儲過程)正在接受int,nvarchar等類型的值,則沒有必要在您的代碼中重新聲明它。

對於複雜類型的場景(例如DateTime,float),我可能會使用Add,因爲它更明確,但AddWithValue適用於更直接的類型場景(Int to Int)。

protected void Button1_Click(object sender, EventArgs e) { 
    if (temp == 0) { 
    try { 
     SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["RegistrationConnectionString"].ConnectionString); 
     conn.Open(); 

     string insertquery = "insert into [Table] (Designation, Username, Email, [Password]) values (@Designation, @Username, @Email, @Password)"; 

     SqlCommand com = new SqlCommand(insertquery, conn); 

     com.Parameters.Add("@Designation", SqlDbType.VarChar).Value = dn.SelectedItem.ToString(); 
     com.Parameters.Add("@Username", SqlDbType.VarChar).Value = un.Text; 
     com.Parameters.Add("@Email", SqlDbType.VarChar).Value = em.Text; 
     com.Parameters.Add("@Password", SqlDbType.VarChar).Value = pw.Text; 
     com.ExecuteNonQuery(); 
     Response.Redirect("Managers.aspx"); 
     Response.Write("Registration Successful"); 
     conn.Close(); 
    } catch (Exception ex) { 
     Response.Write("error :" + ex.ToString()); 
    } 
    } 
    } 
+0

謝謝你,這對我有效。 –

+0

歡迎您:) –

1

你的錯誤似乎是在這一行:

com.Parameters.AddWithValue("@Designation", dn.SelectedItem.ToString()); 

AddWithValue做一個映射,以確定哪些數據類型是對象你傳遞給該方法。這是失敗的。

試試這個:

1)com.Parameters.Add("@Designation", SqlDbType.VarChar).Value = dn.SelectedItem.ToString();

2)如果你想使用AddWithValue調試,看看裏面是什麼dn.SelectedItem.ToString()

反正留着,它始終是最好使用Add代替AddWithValue因爲作爲您現在正在使用的那個典型問題。看看這篇文章:http://blogs.msmvps.com/jcoehoorn/blog/2014/05/12/can-we-stop-using-addwithvalue-already/

相關問題