2013-07-15 2 views
0

두 테이블이있는 데이터베이스가 있습니다. StudentID는 'StudentList'테이블의 기본 키이고 StudentID는 'JournalEntries'테이블의 외래 키입니다.데이터베이스 쿼리 문자열에 액세스

내 웹 사이트에는 사용자가 StudentList에서 학생을 검색 할 수있는 검색 기능이 있으며 결과가 DataGrid에 표시됩니다. 사용자가 목록에서 학생을 선택하면 저널 입력 상자가 나타납니다. 저널 항목 팝업 상자를 채우고 제출 버튼을 클릭하면 저널 항목을 DataGrid에서 선택된 학생 ID에 연결된 JournalEntries 테이블에 입력해야합니다.

protected void SearchGrid_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    FNameLabel.Text = SearchGrid.SelectedRow.Cells[1].Text; 
    LNameLabel.Text = SearchGrid.SelectedRow.Cells[2].Text; 

    string constr = @"Provider=Microsoft.Jet.OLEDB.4.0; Data Source=D:\Sites\Network2\nrsh\App_Data\myDB.mdb"; 
    string cmdstr = "SELECT StudentID FROM StudentList WHERE = SearchGrid.SelectedRow.Cells[3].Text AND INSERT into JournalEntries (Topic, SubTopic, Summary, Date, Notes) values (@Topic, @SubTopic, @Summary, @Date, @Notes)"; 

    OleDbConnection con = new OleDbConnection(constr); 
    OleDbCommand com = new OleDbCommand(cmdstr, con); 
    con.Open(); 
    //The following fields are added from the journal entry form to the corresponding database fields 
    com.Parameters.AddWithValue("@Topic", ddlTopic.Text); 
    com.Parameters.AddWithValue("@SubTopic", txtSubTopic.Text); 
    com.Parameters.AddWithValue("@Date", txtDate.Text); 
    com.Parameters.AddWithValue("@Summary", txtSummary.Text); 
    com.Parameters.AddWithValue("@Notes", txtNotes.Text); 
    com.ExecuteNonQuery(); 
    con.Close(); 
} 

그래서 논리에 대한 제 생각이지만 SQL에 대해 많이 알지 못하기 때문에 아마 완전히 잘못되었습니다. 어떤 도움이라도 좋을 것입니다.

답변

1

SELECT 및 INSERT 문을 결합 할 수 없습니다.

.......

문자열 myValue SearchGrid.SelectedRow.Cells = [3]는 .text;

당신은 문자 그대로 "SearchGrid.SelectedRow.Cells [3]는 .text"가 당신의 string..you에 SearchGrid.SelectedRow.Cells [3]는 .text의 값이없는 ...

string myValue = SearchGrid.SelectedRow.Cells[3].Text; 
string cmdstr = "INSERT into JournalEntries (StudentID , Topic, SubTopic, Summary, Date, Notes) values (@StudentID , @Topic, @SubTopic, @Summary, @Date, @Notes)"; 

내가 좀 같은데요 나중에

com.Parameters.AddWithValue("@StudentID", myValue); 
com.Parameters.AddWithValue("@Topic", ddlTopic.Text); 
com.Parameters.AddWithValue("@SubTopic", txtSubTopic.Text); 
com.Parameters.AddWithValue("@Date", txtDate.Text); 
com.Parameters.AddWithValue("@Summary", txtSummary.Text); 
com.Parameters.AddWithValue("@Notes", txtNotes.Text); 

. 테이블 이름과 테이블의 모든 열 및 해당 데이터 유형 (int, string 등)을 제공해야합니다.

EDIT : REFACTOR.

인수를 허용하는 클래스를 만들어야합니다. 당신은 데이터베이스 코드가 없어야합니다 .... 앉아 GUI 코드입니다.

public class JournalEntriesManager 
{ 

public static void InsertJournalEntry (string studentID, string topic , string subTopic, DateTime DateOf , string summary , string notes) 
{ 
// Your code here 
} 

} 

"우려 사항 분리"의 "레벨 1"과 같습니다.

간단히 말해서, GUI 레벨 코드는 컨트롤의 정보를 수집하고 그 정보를 BusinessLogic (이 경우에는 "JournalEntriesManager")으로 전달해야합니다. 그런 식으로.

+0

정확한 진술은 어떻게 생겼을까요? – Michael

+0

수정 사항을 확인하십시오. 나는 전체 코드가 보이지 않기 때문에 .......... 나는 추측하고있다. – granadaCoder

+0

또한, 생각했던대로하지 않는 SQL 문을 문제를 해결할 때 C# 코드에 포함시켜 문제를 복잡하게 만들지 마십시오.SQL Server Management Studio를 열고 쿼리를 직접 입력하면됩니다. 그렇게하면 SQL을 둘러싼 모든 C# 장치보다 SQL 자체에 집중할 수 있습니다. – catfood

0

여러 조건을 AND 구문과 결합 할 수는 없습니다. 즉, 여러 조건을 결합하는 것입니다. 또한 마술처럼 한 테이블의 행을 다른 테이블의 행과 연관시킬 수는 없지만 JournalEntries 테이블에는 해당 항목이 연관된 학생의 ID가 포함 된 다른 열이 있어야합니다. JournalEntries 테이블에 새 행을 삽입하면 해당 열에 학생 ID가 포함되며 이는 저널 항목이 학생과 연관되는 방식입니다.

또한 검색어에 "SearchGrid.SelectedRow.Cells [3] .Text"와 같은 변수 이름을 포함 할 수 없으면 해당 변수의 값을 쿼리 텍스트에 직접 삽입해야합니다. 이 쿼리를 다른 서버 (데이터베이스 서버)에 보내고 스크립트에 변수가 무엇인지 알지 못한다는 것을 기억하십시오.

+0

SearchGrid.SelectedRow.Cells [3] .Text는 StudentID가있는 셀입니다. – Michael