2017-04-30 28 views
0

被初始化,我不斷收到錯誤執行閱讀器:連接屬性還沒有在C#和Visual Studio

的ExecuteReader:連接屬性在C#和Visual Studio尚未初始化

。我嘗試了一些我研究過的解決方案,但他們似乎並沒有這樣做。

這裏是我的代碼:

public static int AddCustomer(Customer customer) 
{ 
    MySqlConnection connection = MySqlCommand.GetConnection(); 

    string strInsertStatement = 
      "INSERT Customers (Name, Address, City, State, ZipCode) " + 
      "VALUES (@Name, @Address, @City, @State, @ZipCode)"; 

    MySql.Data.MySqlClient.MySqlCommand insertCommand = new MySql.Data.MySqlClient.MySqlCommand(strInsertStatement); 

    insertCommand.Parameters.AddWithValue("@Name", customer.strFirstName); 
    insertCommand.Parameters.AddWithValue("@Address", customer.strStreetName); 
    insertCommand.Parameters.AddWithValue("@City", customer.strCity); 
    insertCommand.Parameters.AddWithValue("@State", customer.strState); 
    insertCommand.Parameters.AddWithValue("@ZipCode", customer.strPhoneNumber); 

    try 
    { 
     connection.Open(); 
     insertCommand.ExecuteNonQuery(); 

     string strSelectStatement = "SELECT IDENT_CURRENT('Customers') FROM Customers"; 
     MySql.Data.MySqlClient.MySqlCommand selectCommand = new MySql.Data.MySqlClient.MySqlCommand(strSelectStatement, connection); 

     int customerID = Convert.ToInt32(selectCommand.ExecuteScalar()); 
     return customerID; 
    } 
    catch (MySqlException ex) 
    { 
     throw ex; 
    } 
    finally 
    { 
     connection.Close(); 
    } 
} 

我缺少的是發出此錯誤出現在哪裏?

+1

使用了'MySqlConnection'和'MySqlCommand'這表明** **的MySQL作爲您的RDBMS - 但一切,你的參數的語法('@ ZipCode')和使用IDENT_CURRENT'的'似乎指向微軟** SQL Server ** - 所以哪一個你真的*想要在這裏談論????? –

+0

這是用於班級作業。我的教授給我們的例子是一個SQL服務器例子,但我應該連接到MySQL服務器。我試圖重用類示例中的一些代碼,除非我真的不知道如何使它適用於MySQL服務器,因爲我們只使用SQL服務器進行學習。 – mace

回答

1

錯誤說明一切:連接屬性尚未設置。

你有一個連接,並且你有insertCommand。代碼中沒有任何地方告訴insertCommand使用Connection。

insertCommand.Connection = connection; 

或者,可能作爲其連接器的一部分,就像您使用選擇一樣。

+0

我需要在代碼中插入這個解決方案嗎?我在想什麼都行不通。 – mace

+0

那麼,其他三個答案建議使用構造函數,所以也許去那個,嘿。否則,您只需在調用ExecuteNonQuery之前將該屬性設置在某個位置。 –

0

您會在哪一行發生錯誤?我剛剛有了一個快速瀏覽一下你的代碼,並認爲你忘了添加到插入命令連接使用下列代替:

編輯:把這裏所有的代碼,增加了錯誤的打印到控制檯和連接的分配。

我想你會在open()方法調用中得到你的錯誤。解決方案中沒有連接字符串。不要忘記輸入您的憑證。

public static int AddCustomer(Customer customer) 
{ 
    MySqlConnection connection = new MySqlConnection(); 
    connection.ConnectionString = "server=127.0.0.1;uid=root;" + 
     "pwd=12345;database=test;" 
    string strInsertStatement = 
     "INSERT Customers " + 
     "(Name, Address, City, State, ZipCode) " + 
     "VALUES (@Name, @Address, @City, @State, @ZipCode)"; 
    MySql.Data.MySqlClient.MySqlCommand insertCommand = 
     new MySql.Data.MySqlClient.MySqlCommand(strInsertStatement); 
    insertCommand.Parameters.AddWithValue(
     "@Name", customer.strFirstName); 
    insertCommand.Parameters.AddWithValue(
     "@Address", customer.strStreetName); 
    insertCommand.Parameters.AddWithValue(
     "@City", customer.strCity); 
    insertCommand.Parameters.AddWithValue(
     "@State", customer.strState); 
    insertCommand.Parameters.AddWithValue(
     "@ZipCode", customer.strPhoneNumber); 
    try 
    { 
     connection.Open(); 
     insertCommand.Connection = connection; 
     insertCommand.ExecuteNonQuery(); 
     string strSelectStatement = 
      "SELECT IDENT_CURRENT('Customers') FROM Customers"; 
     MySql.Data.MySqlClient.MySqlCommand selectCommand = 
      new MySql.Data.MySqlClient.MySqlCommand(strSelectStatement, connection); 
     int customerID = Convert.ToInt32(selectCommand.ExecuteScalar()); 
     return customerID; 
    } 
    catch (MySqlException ex) 
    { 
     Console.WriteLine(ex.ToString()); 
     throw ex; 
    } 
    finally 
    { 
     connection.Close(); 
    } 
} 
+0

我試過這個修復程序,它似乎沒有做到這一點。我怎麼能找到錯誤在哪一行? – mace

+0

請參閱上面的編輯。 – LSA

1

你必須給MySqlCommand的連接作爲第二個參數:

MySql.Data.MySqlClient.MySqlCommand insertCommand = 
      new MySql.Data.MySqlClient.MySqlCommand(strInsertStatement, connection); 
0

您需要設置命令連接屬性。使用接受MySqlConnection的構造函數。

MySql.Data.MySqlClient.MySqlCommand insertCommand = new MySql.Data.MySqlClient.MySqlCommand(strInsertStatement, connection); 
+0

我試過了,它似乎沒有工作。 – mace