2014-04-17 5 views
-3

양식을 사용하는 다른 사용자가 텍스트 상자에 고객 ID를 입력 한 다음 해당 레코드를 양식의 텍스트 상자에 표시 할 때 Visual Studio C#을 통해 쿼리를 만들어 CustomerID에 대한 모든 레코드를 선택하려고합니다. 어떻게 이것을 달성 할 수 있습니까? SQL이나이 두 언어를 함께 사용하는 방법에 대해서는 거의 알지 못합니다. 나는 이미 데이터베이스를 만들고 그것으로 비주얼 스튜디오에 데이터 소스를 만들었다. 내 쿼리 그러나, 나는 정말 텍스트 상자에서오고 있기 때문에 Param1을 @ 실제로 호출 할 필요가 모르는고객 입력을 기반으로 Visual Studio에서 SQL 쿼리를 실행하는 방법은 무엇입니까?

SELECT  CustomerID, Name, Address, City, State, ZipCode, Phone, Email 
FROM   Customers 
WHERE  (CustomerID = @Param1) 

같이 보일 전망이다. 이 쿼리는 어떻게 읽어야합니까? 나는 올바른 길을 가고 있는가?

두 번째 질문은 일단이 데이터를 선택하면 선택한 데이터의 각 부분을 양식의 텍스트 상자에 채우려면 어떻게해야합니까?

초보자를위한 질문에 사과 드리며, 이것은 SQL로 정말 아무것도 할 수 없습니다.

도움 주셔서 감사합니다.

+0

데이터베이스 란 무엇입니까? –

답변

3

아마 ADO.NET과 그 작동 방식을 읽어야합니다. C#에서 SQL을 실행하려면 SqlConnection과 SqlCommand를 만들어야합니다.

using(SqlConnection conn = new SqlConnection(connectionString)) 
{ 
    conn.Open(); 
    using(SqlCommand command = new SqlCommand("your select statement", conn)) 
    { 
     command.AddWithValue("@Param1", YourTextBox.Text); 
     var reader = command.ExecuteReader(); 

     reader.Read(); 
     txtFoo.Text = reader["FooColumn"]; 
     txtBar.Text = reader["BarColumn"]; 
    } 
} 

위 코드는 완전하고 기능적이지 않습니다. 연구와 독서는 모두 마쳤지 만 전체 업무/학교 과제를 작성하지 않으면 도움이됩니다.

+0

'AddWithValue()'메소드의 팬이 아니기 때문에 (성능 문제가 발생할 수 있습니다), 나머지는 꽤 좋습니다. –

+0

성능 문제를 확장하십시오. 모든 작업은 새 SqlParameter의 생성을 래핑하여 컬렉션에 추가하는 것입니다. AddWithValue의 실제 코드를 SqlParameterCollection을 Decompiling하는 것은 문자 그대로'return this.Add (새 SqlParameter (parameterName, value)); ' –

+0

입니다. 질문의 두 번째 부분에 답변을 추가하려면 답변을 삭제하겠습니까? –

2

See this thread 첫 번째 질문입니다. 다음은 간단한 예입니다 (변환기를 사용했습니다. 불일치가 생겨서 죄송합니다).

string eId = EmployeeIDTxt.Text; 
    string query = String.Empty; 
    query = "SELECT EMPL_SEQ_ID, EMPL_ID, EMPL_LAST_NM, EMPL_FIRST_NM, EMPL_PREFRD_NM" 
    query &= " FROM EMPL" 
    query &= " WHERE EMPL_SEQ_ID = @ID; " 

DataSet ds = new DataSet(); 
using (SqlConnection conn = new SqlConnection(MyConn)) { 'myconn should be your connection string 
    using (SqlDataAdapter da = new SqlDataAdapter()) { 'SqlDataAdapter should be different if you're using OleDb or Oracle 
     da.SelectCommand = new SqlCommand(query, conn); 'See previous comment for SqlCommand 
     da.SelectCommand.Parameters.Add(new SqlParameter("@ID", eId)); 'Gives your parameter the value you feed it 
     da.Fill(ds); 'fill the dataset with the results from the query 
    } 
} 

또한 SQL 문에서 데이터를 DataTable 또는 DataSet으로로드하여 각 항목을 구체적으로 참조 할 수도 있습니다. 그것은 다음과 같을 것이다 :

DataSet ds = New DataSet(); 

EmployeeIDTxt.Text = ds.Tables(0).Rows(0).Item(1).ToString; 
LNameTxt.Text = ds.Tables(0).Rows(0).Item(2).ToString; 
FNameTxt.Text = ds.Tables(0).Rows(0).Item(3).ToString; 

을 DataTable의에서 데이터 집합 또는 항목에있는 테이블의 인덱스를 사용하면 텍스트 상자에 해당 값을 삽입 할 수 있습니다.

위의 예에서 ds.Tables (0) .Rows (0) .Item()의 인덱스에있는 첫 번째 항목은 EmployeeID이며 EmployeeIDTxt 텍스트 상자에 삽입됩니다.

또한 Oracle을 사용하는 경우 SQL 문의 끝에있는 세미콜론이 없어야하며 매개 변수 앞에 콜론을 사용해야합니다. 간단한 예를 보려면 아래를 참조하십시오.

myCommand.Parameters.Add(New OracleParameter(":EmployeeID", empId)) 
1

데이터 소스가있는 것을 확인하고 LINQ를 사용하여 상호 작용할 수 있습니다. LINQ에 대한 기본 정보 및 사용 방법은 this link을 참조하십시오.

관련 문제