2017-10-05 12 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")); 
    } 
} 

は、しかし、私はこのselect文がパラメータ化したいここに私のコードを使用してうまくダウン私のドロップを取り込むことができます。これどうやってするの? 私は次のようにパラメータ化INSERT文の書き込み快適午前:

だから、
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); 

を、どのように私は2番目の例のように私の最初のクエリを行うことができますか?

おかげで、すべての

nammrick

+0

私はよく分からないが、私はグーグルで、それをうまくprobabky可能性が...あなたは 'go.ExecuteNonQuery()を持っている必要があります確信しています。 'line in there - 私はそれがこの場合何かをしているとは思わない。 –

+0

「フィルタ条件でSQLクエリを実行する」の例は次のとおりです。https://www.aspsnippets.com/Articles/Parameterized-Queries-ADO.Net.aspx –

+0

選択文を実行すると、 – nammrick

答えて

4

まず、ExecuteNonQuery()方法の使用は、クエリの結果を返すようにしたいので、ちょうどExecuteReader()にこだわる、SELECTクエリに対して有効ではありません。これはExecuteNonQuery方法の使用法の説明である:

あなたは( 例えば、データベースの構造を照会またはテーブルなどのデータベース オブジェクトを作成)カタログ操作を実行するためには、ExecuteNonQueryを使用することができ、またはデータを変更しますUPDATE、INSERT、またはDELETEステートメントを実行して、DataSetを使用している のデータベースではありません。

修正クエリの流れは次のようにする必要があります:

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 
} 

あなたがSELECT文のパラメータ化クエリを使用する場合は、WHEREに含まれる少なくとも1つの列(及び一つのパラメータ名)が必要です句(以下の例を参照):

012:

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

その後、あなたは上記のクエリにパラメータ値を渡すためにSqlParameterを使用することができます

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?

関連する問題