2016-11-06 258 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()** **兩次**。一次在'if'和一次'while'中,這意味着你跳過第一個結果,因爲[Read前進到下一個記錄](https://msdn.microsoft.com/en-us/library/system.data .sqlclient.sqldatareader.read(v = vs.110).aspx) – stuartd

回答

5
cmd1.Connection = conn; 

應該是你的實例之後,或者甚至更好,通過康恩對象中的SqlCommand構造函數。

+0

連接**已被分配,但已爲時太晚...... – stuartd

+0

我很抱歉,請您稍微具體一點。 @Pedro Luz –

+1

@ananthreddy在調用'cmd1.ExecuteReader()'之前將連接分配給命令對象**,否則它不知道要使用哪個連接。 – stuartd

1

您正在執行的查詢後設置連接屬性:

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

設置 cmd1.Connection =康恩; 之前 cmd1.ExecuteReader。

相關問題