2014-11-11 5 views
-1

내가System.Data.SqlClient.SqlException 외부 키

enter image description here

나는 새로운 Cargo를 삽입하려고 예외를 표시이 테이블

말을해야

INSERT 문을 충돌 발생 FOREIGN KEY 제약 조건 "FK_Cargo_Rol"과 충돌했습니다. 충돌은 데이터베이스 "Banco"테이블 "dbo.Rol", 열 'idRol'에 나타납니다. 명세서가 종료되었습니다.

이것은 내 코드 ASPX.CS

public partial class Public_Cargo_CrearCargo : System.Web.UI.Page 
{ 
protected void Page_Load(object sender, EventArgs e) 
{ 
    if(!IsPostBack){ 
     string query1 = @"SELECT * FROM Formula"; 
     string query2 = @"SELECT * FROM Rol"; 

     using (SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["Banco"].ToString())) 
     { 
      SqlCommand comand = new SqlCommand(query1, con); 
      SqlCommand comand2 = new SqlCommand(query2, con); 

      DataSet ds = new DataSet(); 
      DataSet ds2 = new DataSet(); 

      con.Open(); 
      var adapter = new SqlDataAdapter(comand); 
      var adapter2 = new SqlDataAdapter(comand2); 

      adapter.Fill(ds, "Formula"); 
      adapter2.Fill(ds2, "Rol"); 

      Select1.DataSource = ds; 
      Select1.DataTextField = "Formula"; 
      Select1.DataValueField = "idFormula"; 
      Select1.DataBind(); 

      Select2.DataSource = ds2; 
      Select2.DataTextField = "Nombre_Rol"; 
      Select2.DataValueField = "idRol"; 
      Select2.DataBind(); 


     } 
    } 
} 

protected void docreatecargo(object sender, EventArgs e) 
{ 
    string query = @"INSERT INTO Cargo (Nombre, idFormula, idRol) VALUES (@nombre, @idFormula, @idRol)"; 

    using (SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["Banco"].ToString())) 
    { 
     SqlCommand comand = new SqlCommand(query, con); 
     comand.Parameters.AddWithValue("@idFormula", Select1.SelectedIndex.ToString()); 
     comand.Parameters.AddWithValue("@idRol", Select2.SelectedIndex.ToString()); 
     comand.Parameters.AddWithValue("@nombre", cargo.Text); 
     con.Open(); 
     Console.Write("idformula :" + Select1.SelectedIndex.ToString() + "," + "id Rol :" + Select2.SelectedIndex.ToString() + "," + "nombre :" + cargo.Text); 
     comand.ExecuteScalar(); 

     Response.Redirect("~/Public/Cargo/Cargos.aspx"); 

    } 
} 

}

이 내가 그것을 고칠 수있는 방법 나의 페이지

<asp:Content runat="server" ContentPlaceHolderID="ContentPlaceHolder1"> 
<div class="container"> 
    <div class="row"> 
     <div class="col-md-6"> 
      <div class="form-group"> 
       <label>Cargo</label> 
       <asp:TextBox runat="server" ID="cargo" CssClass="form-control" required="true"></asp:TextBox> 
      </div> 
      <div class="form-group"> 
       <label>Formula asociada</label> 
       <select id="Select1" runat="server" name="D1"> </select> 
      </div> 
      <div class="form-group"> 
       <label>Rol asociada</label> 
       <select id="Select2" runat="server" name="D2"> </select> 
      </div> 
      <div class="form-group"> 
       <asp:Button ID="btn_login" OnClick="docreatecargo" CssClass="btn btn-primary btn-lg btn-block" Text="Guardar" runat="server"/> 
      </div> 

     </div> 
    </div> 
</div> 

ASP

입니까 ??

+1

'Rol table'에는없는 'Cargo table'에 값을 삽입하려고합니다. 참조 된 테이블에 존재해야하는 '외부 키 열'에 값을 삽입하면 –

+0

Rol 테이블의 idRol 열에없는 값을 카고 테이블의 idRol 열에 삽입하려고 시도했을 것입니다. – knkarthick24

+0

@Pradeep "select tag"가 모든 ''Rol ''데이터베이스에 대한 질의와 함께 완료된다는 것은 이상합니다. '' <선택 이름 = "ctl00 $ ContentPlaceHolder1 $ 선택 2"ID = "ContentPlaceHolder1_Select2"> \t <옵션 값 = "1"> Administrador '' – cheloncio

답변

1

:

comand.Parameters.AddWithValue("@idFormula", Select1.SelectedIndex.ToString()); 
comand.Parameters.AddWithValue("@idRol", Select2.SelectedIndex.ToString()); 

가 [컨트롤의 controlid] .SelectedIndex가 바인딩 소스에서 선택된 아이템의 인덱스 아닌 데이터베이스에서 해당 ID를 반환한다.

comand.Parameters.AddWithValue("@idFormula", Select1.Value.ToString()); 
comand.Parameters.AddWithValue("@idRol", Select2.Value.ToString()); 
+0

가 대단히 감사합니다 : D – cheloncio

0

FK 테이블에 값이 없으면 기본 키 테이블에 값을 넣을 수 없습니다. 다음의 코드 라인 용