2017-10-05 1 views
-1

매개 변수가있는 쿼리 질문을 찾고 있습니다. SqlDataReader 매개 변수가있는 쿼리를 사용하여 드롭 다운 목록을 채우는 예제를 찾을 수 없습니다.C#에서 매개 변수화 된 쿼리와 함께 SqlDataReader를 사용하는 방법?

지금은

if (!this.IsPostBack) 
{ 
    using (SqlConnection con = new SqlConnection(SQLConnectionString)) 
    { 
     System.Data.SqlClient.SqlCommand go = new System.Data.SqlClient.SqlCommand(); 

     con.Open(); 
     go.Connection = con; 
     go.CommandText = "SELECT InsuredID, FirstName, LastName FROM [Lab2].[dbo].[INSURED]"; 
     go.ExecuteNonQuery(); 

     SqlDataReader readIn = go.ExecuteReader(); 

     while (readIn.Read()) 
     { 
      ddlHomeInsuredID.Items.Add(
       new ListItem(readIn["InsuredID"].ToString() + " : " + readIn["FirstName"].ToString() 
       + " " + readIn["LastName"].ToString())); 
     } 

     con.Close(); 

     ddlHomeInsuredID.Items.Insert(0, new ListItem("--Select InsuredID--", "0")); 
    } 
} 

그러나, 나는이 선택 문이 매개 변수가 만들고 싶어 여기에 내 코드를 사용하여 잘 아래로 내 드롭을 채울 수 있습니다. 어떻게해야합니까? 내가 생각처럼 편안하게 쓰기 파라미터 삽입 문 다음

그래서
using (SqlConnection connection = new SqlConnection(SQLConnectionString)) 
{ 
    SqlCommand command = new SqlCommand(); 
    command.Connection = connection; 
    command.CommandType = System.Data.CommandType.Text; 

    command.CommandText = @"INSERT INTO [Lab2].[dbo].[INSURED] ([FirstName], [LastName], [MI], [DateOfBirth], 
[CreditScore], [AddressID], [DriversLicenseNumber], [LastUpdatedBy], [LastUpdated]) VALUES 
(@firstName, @lastName, @middleInitial, @dateOfBirth, @creditScore, @addressID, 
@driversLicenseNumber, @lastUpdatedBy, @lastUpdated)"; 

    command.Parameters.Add("@firstName", SqlDbType.VarChar, 20).Value = Insured.insuredArr[j].getFirstName(); 
    command.Parameters.Add("@lastName", SqlDbType.VarChar, 30).Value = Insured.insuredArr[j].getLastName(); 
    command.Parameters.Add("@middleInitial", SqlDbType.Char, 1).Value = Insured.insuredArr[j].getMiddleInitial(); 
    command.Parameters.Add("@dateOfBirth", SqlDbType.VarChar, 30).Value = Insured.insuredArr[j].getDateOfBirth(); 
    command.Parameters.Add("@creditScore", SqlDbType.Int).Value = Insured.insuredArr[j].getCreditScore(); 
    command.Parameters.Add("@addressID", SqlDbType.Int).Value = Insured.insuredArr[j].getAddressID(); 
    command.Parameters.Add("@driversLicenseNumber", SqlDbType.VarChar, 30).Value = Insured.insuredArr[j].getDriversLicenseNumber(); 
    command.Parameters.Add("@lastUpdatedBy", SqlDbType.VarChar, 20).Value = Insured.insuredArr[j].getLastUpdatedBy(); 
    command.Parameters.Add("@lastUpdated", SqlDbType.Date).Value = Insured.insuredArr[j].getLastUpdated(); 

    connection.Open(); 
    command.ExecuteNonQuery(); 
    connection.Close(); 
} 

MsgBox("Record(s) inserted into database", this.Page, this); 

, 어떻게 내가 두 번째 예제처럼 내 첫 번째 쿼리를 만들 수 있습니까?

감사

nammrick 모든

+0

잘 모르겠어요하지만 난 당신이) (당신이'go.ExecuteNonQuery가 있어야 확신합니다 ... 인터넷 검색에 의해 작업에게 그것을 probabky 수있다; 'line in there -이 경우에는 아무것도하지 않는다고 생각합니다. –

+0

다음은 "필터 조건으로 SQL 쿼리 실행"아래의 예입니다 : https://www.aspsnippets.com/Articles/Parameterized-Queries-ADO.Net.aspx –

+0

예 select 문을 실행합니다 – nammrick

답변

4

첫째, ExecuteNonQuery() 방법의 사용은 쿼리 결과를 반환 할 때문에 단지 ExecuteReader() 고수, SELECT 쿼리에 대해 유효하지 않습니다. 넌 (데이터베이스의 구조를 조회 또는 테이블과 같은 데이터베이스 객체를 생성 예) 카탈로그 작업을 수행 할 수는 ExecuteNonQuery 사용하거나 데이터 변경

:이 ExecuteNonQuery 방법의 사용 설명한다 이없는 데이터베이스에서 UPDATE, INSERT 또는 DELETE 문을 실행하여 데이터 집합을 사용합니다.

수정 된 쿼리 흐름은 다음과 같이해야한다 : 당신이 SELECT 문에 대해 매개 변수화 된 쿼리를 사용하려면

using (SqlConnection con = new SqlConnection(SQLConnectionString)) 
{ 
    SqlCommand go = new SqlCommand(); 

    con.Open(); 
    go.Connection = con; 
    go.CommandText = "SELECT InsuredID, FirstName, LastName FROM [Lab2].[dbo].[INSURED]"; 

    SqlDataReader readIn = go.ExecuteReader(); 
    while (readIn.Read()) 
    { 
     // reading data from reader 
    } 

    con.Close(); 

    // other stuff 
} 

, 당신은 WHERE에 포함되는 적어도 하나의 열 (하나의 매개 변수 이름)가 필요합니다 절 (아래 예 참조) :

SELECT InsuredID, FirstName, LastName FROM [Lab2].[dbo].[INSURED] WHERE InsuredID = @InsuredID 

을 그리고, 위의 쿼리에 매개 변수 값을 전달하는 SqlParameter를 사용할 수 있습니다

012 3,516,
using (SqlConnection con = new SqlConnection(SQLConnectionString)) 
{ 
    System.Data.SqlClient.SqlCommand go = new System.Data.SqlClient.SqlCommand(); 

    con.Open(); 
    go.Connection = con; 
    go.CommandText = "SELECT InsuredID, FirstName, LastName FROM [Lab2].[dbo].[INSURED] WHERE InsuredID = @InsuredID"; 
    go.Parameters.Add("@InsuredID", SqlDbType.Int).Value = 1; // example value for parameter passing 

    SqlDataReader readIn = go.ExecuteReader(); 
    while (readIn.Read()) 
    { 
     // reading data from reader 
    } 

    con.Close(); 

    // other stuff 
} 

NB : 동일한 활성 연결 SELECT 문 데이터로 채우는 동시에 INSERT/UPDATE/DELETE 조작을 피하고, 상기 이전 연결 다른 질의를 실행하기 전에 먼저 닫아야한다.

더 예 :

How to use string variable in sql statement

How to use sql parameters for a select query?

관련 문제