2016-11-06 94 views
1

この質問は何度も尋ねられましたが、 接続のエラーは私に苦労していることを理解しています。ExecuteReader:接続プロパティが初期化されていません

のExecuteReader:Connectionプロパティは、私はテーブルから電話番号を検索しようとしている

初期化されていません。私は他のスレッドで与えられたソリューションのほとんどすべてを試しましたが、エラーを修正する方法を理解できていないようです。私はsqlconnectionとコマンドを関連付ける必要がありますが、私はそれを行うことができませんでした。

SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["Connection"].ConnectionString); 

using(SqlCommand cmd1 = new SqlCommand()) 
{ 
conn.Open(); 

cmd1.CommandType = System.Data.CommandType.StoredProcedure; 
cmd1.CommandText = "SearchName"; 
SqlParameter p1 = new SqlParameter(); 
p1.ParameterName = "@Name";//Stored Proc 
p1.Value = SearchbyName.Name; 
cmd1.Parameters.Add(p1); 

using (SqlDataReader dr = cmd1.ExecuteReader()) 
{ 
if (dr.Read()) 
{ 
    while (dr.Read()) 
    { 
    Console.WriteLine(dr[0] + " " + dr[1]); 
    } 
    SearchExit(); 
    } 
else 
    { 
    Console.WriteLine("No contact found with name {0}", SearchbyName.Name); 
    } 

    cmd1.ExecuteNonQuery(); 
    cmd1.Connection = conn; 
    conn.Close(); 
    SearchExit(); 
    } 
} 
+0

'cmd1.ExecuteNonQuery();と' cmd1.ExecuteReader() 'を呼び出す必要はありません – stuartd

+0

また、 'dr.Read()' **を2回呼びます**。一度は 'if'に、一度は' while'に入ると、最初の結果はスキップされます。[次のレコードに進む](https://msdn.microsoft.com/en-us/library/system.data) .sqlclient.sqldatareader.read(v = vs.110).aspx) – stuartd

答えて

5
cmd1.Connection = conn; 

インスタンスをした後、右、またはより良い、SqlCommandオブジェクトのコンストラクタでconnオブジェクトを渡す必要があります。

+0

**接続は**割り当て済みですが、遅すぎます... – stuartd

+0

私はお詫び申し上げますが、少し具体的にお願いします。 @Pedro Luz –

+1

@ananthreddy 'cmd1.ExecuteReader()'を呼び出す前にコマンドオブジェクト**に接続を割り当てます。そうでないと、使用する接続がわからないためです。 – stuartd

1

あなたは、クエリの実行後に接続プロパティを設定されています

using (SqlDataReader dr = cmd1.ExecuteReader()) 
// More code here 
cmd1.Connection = conn; 

セット cmd1.Connection = CONN。 の前に cmd1.ExecuteReader。

関連する問題