2017-01-20 2 views
0

두 개의 테이블을 사용하여 데이터를 삽입하는 형식이 있습니다. ,두 개의 테이블에 여러 데이터를 삽입하고 마지막 삽입 된 ID를 다른 테이블에 삽입해야합니다.

scholarshipDetail , scholarshipCourse. 
  • scholarshipDetail 테이블 scholarshipName 연도
  • scholarshipCourse 테이블 scholarshipID을 가지고 있습니다 참여

    scholarship name, course, year 
    

    두 테이블은 다음과 같습니다 형태로

    일부 열은 같은 될 것 물론

scholarshipDetail :

schid  schName  year 
----------------------------- 
1   star   2015 
2   moon   2016 

scholarshipCourse :

schID course 
------------------ 
1  maths 
1  english 
2  maths 

새 사용자가 ID가 3 그것은 두 개의 테이블에 삽입하는 것을 의미합니다 새로운 장학금을 추가하고 싶어한다고 가정. 어떻게 그럴 수 있니?

NEW ERROR (ALR를 삽입하려면 관리) : 이

public DataTable test(string name, string course) 
{ 
    string insertsql = "INSERT INTO Table1(schName) OUTPUT INSERTED.addID values (@schName)"; 

    SqlCommand cmd = new SqlCommand(insertsql,conn); 

    cmd.Parameters.AddWithValue("@schName", name); 

    conn.Open(); 
    int i = cmd.ExecuteNonQuery(); 

    var table1Id = (int)cmd.ExecuteScalar(); 

    string insertsql1 = "INSERT INTO Table2(ScholarshipID, DiplomaCourse) VALUES (@id, @course)"; 

    SqlCommand cmd2 = new SqlCommand(insertsql1, conn); 
    cmd2.Parameters.AddWithValue("@id", table1Id); 
    cmd2.Parameters.AddWithValue("@course", course); 

    SqlDataAdapter da = new SqlDataAdapter(); 
    da.SelectCommand = cmd; 

    da.SelectCommand = cmd2; 
    DataTable dt = new DataTable(); 
    da.Fill(dt); 

    return dt; 
} 

편집

내 테이블의 출력은 표

schID  schname 
------------------- 
1   jj 
2   jj 

표 2

TableID  schID  Course 
------------------------------ 
1   2   Maths 

입니다210 데이터가 Table1에 두 번 삽입됩니다. 왜 이렇게이다?

이제 문제는, 사용자가 장학금에 적용되는 과정 선택할 수 있도록 체크 박스가있을 것입니다 :

편집을 (SOLVED).

사용자가 모두 체크 박스를 클릭하면 마지막 체크 박스 만 데이터베이스에 삽입됩니다. 당신은 두 번 명령을 실행하는

protected void Button1_Click(object sender, EventArgs e) 
{ 
     // addScholarship[] test = new addScholarship[1]; 

     string course = ""; 
     string Name = schName.Text; 

     if (DIT.Checked) 
     { 
      course = "DIT"; 
     } 

     if (DFI.Checked) 
     { 
      course = "DFI"; 
     } 

     addScholarship[] insertName = new addScholarship[1]; 
     addScholarship insertedName = new addScholarship(Name,course); 

     scholarshipBLL obj = new scholarshipBLL(); 
     DataTable dt = obj.test(Name, course); 
} 
+0

* 새 사용자는 ID가 3과 두 개의 테이블 *에 삽입하는 것을 의미합니다 새로운 장학금을 추가하고 싶어한다고 가정 - 당신의'scholarshipDetail' 테이블'auto_increment' 속성이 무엇입니까? 그렇다면 삽입은 새로운 행 입력의 ID에 항상'+ 1'을줍니다. 그런 식으로, 당신은 [mysqli_insert_id] (https://dev.mysql.com/doc/apis-php/en/apis-php-mysqli.insert-id.html), [예제] (http://www.w3schools.com/php/php_mysql_insert_lastid.asp) ..하지만 두 사람이 실제로 시스템을 사용한다면 - 그 대답은 데이터베이스 트랜잭션에 속해 있습니다. –

+0

예 자동 증가가 있습니다. 그래서 schID는 새로운 장학금이 추가 될 때마다 자동으로 증가합니다. 질문은 내 신분증을 장학금 안내서에 삽입하는 방법입니다. 지금은 두 테이블에 삽입 할 수 있습니다. 하지만 ScholarshipCourse의 schID는 NULL입니다. – skylight

+0

그리고 asp.net fyi를 사용하고 있습니다. – skylight

답변

0

게시 한 최신 문제. 모든 if 블록 이후에 한 번만 obj.test 메서드를 호출합니다.

"course"변수는 조건이 true 인 최신 if 블록의 값을 갖습니다.

DataTable dt = obj를 호출해야합니다.시험 (이름, 코스); 메소드는 모든 if 블록에 있습니다. 즉, 확인란을 선택하면 행 삽입이 호출됩니다. 선택하지 않으면 행을 삽입하지 않습니다. 다음은 button_click에 입력해야하는 코드입니다.

string course = ""; 
string Name = schName.Text; 
scholarshipBLL obj = new scholarshipBLL(); 

List<addScholarship> addScholarshipList= new List<addScholarship>(); 

addScholarship scholarship; 
if (DIT.Checked) 
{ 
    scholarship = new addScholarship(Name,course); 
    addScholarshipList.Add(insertedName); 
    course = "DIT"; 
    DataTable dt = obj.test(Name, course); 

} 

if (DFI.Checked) 
{ 
    scholarship = new addScholarship(Name,course); 
    addScholarshipList.Add(insertedName); 
    course = "DFI"; 
    DataTable dt = obj.test(Name, course); 

} 
+0

안녕하세요. 도움을 주셔서 감사합니다. 지금 내 데이터베이스에, 그것은 나를 비운다. null도 아니고 값도 없습니다. 이유가 무엇일까요? @ChetanRanpariya – skylight

+0

답변에 따라 : insertName이 두 개 있습니다. 내가 addScholarship에 대한 insertName 삽입되어야한다고 생각해? – skylight

+0

죄송합니다 .. 코드에 약간의 문제가있었습니다. 그러나 코드에서 obj.Test 메서드를 호출 한 후 코스 변수가 실제 값으로 할당되었다는 것이 코드에서 분명했습니다. 따라서 데이터베이스에서 비어있는 이유입니다. 당신이 이것을 집어 들지 못했을 지 모르겠습니다. –

0
BEGIN; 

    INSERT INTO scholarshipDetail(schid,schName,year) VALUES(3,'sun',2017); 

    INSERT INTO scholarshipCourse(schID,course) VALUES(LAST_INSERT_ID(),'science'); 

COMMIT; 
+0

scholarshipDetail의 schid가 auto_increment 인 것을 확인하십시오 – Sarawanakumar

+0

안녕하세요 위의 질문을보십시오. 나는 편집했고 마지막 ID를 삽입 관리합니다. 그러나, 내 databse에서 그것은 두 번 삽입. @sarawanakumar 위에서 설명 할 것입니다. – skylight

+0

코드에 아무 문제가 없습니다. public DataTable 테스트를 2 번 실행하고 디버깅을 시도하십시오. – Sarawanakumar

0

: 내 코드 숨김 (CS)에서

.

int i = cmd.ExecuteNonQuery(); 

var table1Id = (int)cmd.ExecuteScalar(); 

하나만 실행하면됩니다. cmd.ExecuteNoteQuery를 제거하면 문제가 해결 될 것이라고 생각합니다.

+0

안녕하세요. 그것은 작동합니다. – skylight

+0

안녕하세요, 새로운 오류를보고 싶습니다. – skylight

관련 문제