2013-05-28 41 views
0

我的代碼有什麼問題?當我設置SQL Server管理工作室和C#之間的連接時,它給了我這個錯誤「ExecuteNonQuery:連接屬性尚未初始化。」設置SQL Server和C之間的連接時出錯#

private void button1_Click(object sender, EventArgs e) 
{ 
    SqlConnection con = new SqlConnection(); 
    con.ConnectionString= "Database= hotel; server= Sherissa\SQLEXPRESS"; 
    con.Open(); 
    SqlCommand cmd = new SqlCommand("insert into CheckIn (@TransactionId,@GuestName,@RoomType,@RoomNo,@ReservationDate,@CheckInDate,@CheckOutDate,@NoOfDays,@NoOfAdults,@NoOfChildren)"); 
    cmd.Parameters.AddWithValue("@TransactionId",textBox1.Text); 
    cmd.Parameters.AddWithValue("@GuestName", textBox2.Text); 
    cmd.Parameters.AddWithValue("@RoomType", textBox3.Text); 
    cmd.Parameters.AddWithValue("@RoomNo", textBox4.Text); 
    cmd.Parameters.AddWithValue("@ReservationDate", textBox5.Text); 
    cmd.Parameters.AddWithValue("@CheckInDate", textBox6.Text); 
    cmd.Parameters.AddWithValue("@CheckOutDate", textBox7.Text); 
    cmd.Parameters.AddWithValue("@NoOfDays", textBox8.Text); 
    cmd.Parameters.AddWithValue("@NoOfAdults", textBox9.Text); 
    cmd.Parameters.AddWithValue("@NoOfChildren", textBox10.Text); 

    cmd.ExecuteNonQuery(); 
    con.Close(); 
    MessageBox.Show("DATA ADDED SUCCESSFULLY!!"); 
} 
+0

您的連接字符串是硬編碼的。使用app.config中的部分。你的表現層中有數據層代碼..如果這是一個快速演示,那沒關係,如果這真的是你打算做這件事的原因......糟糕。 .Text總是一個字符串...你需要Convert.ToInt32(etc等)的值。 – granadaCoder

+0

的可能的複製[的ExecuteNonQuery:Connection屬性尚未初始化(http://stackoverflow.com/a/10263125/2091410) –

+0

您已經標記了與MySQL和SQL服務器這個問題。你試圖連接到哪個數據庫? – Steve

回答

1
SqlCommand cmd = new SqlCommand("insert into CheckIn (@TransactionId, @GuestName, @RoomType, @RoomNo, @ReservationDate, @CheckInDate, @CheckOutDate, @NoOfDays, @NoOfAdults, @NoOfChildren)");` 

此行應能鍵入,

SqlCommand cmd = new SqlCommand("insert into CheckIn (@TransactionId, @GuestName, @RoomType, @RoomNo, @ReservationDate, @CheckInDate, @CheckOutDate, @NoOfDays, @NoOfAdults, @NoOfChildren)", con); 
+0

仍然是相同的錯誤 – user2430070

0

你需要指定連接到你的命令:

SqlCommand cmd = new SqlCommand("insert into CheckIn (@TransactionId,@GuestName,@RoomType,@RoomNo,@ReservationDate,@CheckInDate,@CheckOutDate,@NoOfDays,@NoOfAdults,@NoOfChildren)", con); 
3

我在這裏看到幾個錯誤。

第一個錯誤是您的問題的實質。要解決這個問題,你需要將你的命令與特定的連接關聯起來。請記住,您可能同時連接到多個不同的數據庫。一個命令需要知道使用哪個連接。

下一個錯誤是您的Sql語法錯誤。您錯過了所需的VALUES關鍵字。

另一個問題是您沒有正確關閉連接。如果拋出異常,代碼將永遠不會將其發送到con.Close();行。如果這經常發生,你會將自己鎖定在數據庫之外。

最後,挑剔。我不是.AddWithValue()方法的粉絲,因爲它強制.Net嘗試猜測您正在使用的sql數據類型。有時候它會猜測錯誤,當它發生時,性能影響可能會很嚴重,因爲它可能會中斷數據庫的索引使用。

這裏是代碼,解決了四個問題:

private void button1_Click(object sender, EventArgs e) 
{ 
    using (var con = new SqlConnection("Database= hotel; server= roger\SQLEXPRESS")) 
    using (var cmd = new SqlCommand("insert into CheckIn VALUES (@TransactionId,@GuestName,@RoomType,@RoomNo,@ReservationDate,@CheckInDate,@CheckOutDate,@NoOfDays,@NoOfAdults,@NoOfChildren)", con)) 
    { 

     cmd.Parameters.Add("@TransactionId", SqlDbType.Int).Value = int.Parse(textBox1.Text); 
     cmd.Parameters.Add("@GuestName", SqlDbType.NVarChar, 50).Value = textBox2.Text; 
     cmd.Parameters.Add("@RoomType", SqlDbType.NVarChar, 10).Value = textBox3.Text; 
     cmd.Parameters.Add("@RoomNo", SqlDbType.NChar, 4).Value = textBox4.Text; 
     cmd.Parameters.Add("@ReservationDate", SqlDbType.DateTime).Value = datetime.Parse(textBox5.Text); 
     cmd.Parameters.Add("@CheckInDate", SqlDbType.DateTime).Value = datetime.Parse(textBox6.Text); 
     cmd.Parameters.Add("@CheckOutDate", SqlDbType.DateTime).Value = datetime.Parse(textBox7.Text); 
     cmd.Parameters.Add("@NoOfDays", SqlDbType.Int).Value = int.Parse(textBox8.Text); 
     cmd.Parameters.Add("@NoOfAdults", SqlDbType.Int).Value = int.Parse(textBox9.Text); 
     cmd.Parameters.Add("@NoOfChildren", SqlDbType.Int).Value = int.Parse(textBox10.Text); 

     con.Open(); 
     cmd.ExecuteNonQuery(); 
    } 
    MessageBox.Show("DATA ADDED SUCCESSFULLY!!"); 
} 

當然,我不得不在數據類型使用猜測,在我自己的代碼,我也會投入多一點努力前驗證輸入試圖解析它們。

+0

還是相同的錯誤 – user2430070

+0

請確保你有',con'部分在創建命令行的末尾。 –

+0

yup its der .. .......... – user2430070