2013-04-10 78 views
1

我是C#的新手,只研究了幾個星期。我正在用後窗口和Access數據庫編寫一個應用程序。我希望將用戶插入的細節添加到訪問數據庫中。我已經通過其他論壇(包括在stackoverflow)看到這一點,但我不斷收到在運行時拋出一個錯誤,說明'命令文本沒有設置爲命令對象'(ive突出顯示在下面顯示的行)哪我不明白,也無法擺脫。任何幫助將非常感激。由於ķ引發異常:C#命令文本未設置爲命令對象

private void btnOkay_Click(object sender, EventArgs e) 
     { 
      string connectionString = 
       "provider=Microsoft.ACE.Oledb.12.0;" + 
       "data source=C:\\Users\\Documents\\StudentRegistrationDatabase.accdb"; 

     OleDbConnection myOleDbConnection = new OleDbConnection(connectionString); 
     OleDbCommand myOleDbCommand = myOleDbConnection.CreateCommand(); 

     string strSql = @"INSERT INTO StudentDetails ([Forename],[Surname],[CourseName],[DOB],)" + 

      "VALUES('"+txtFirstName.Text +"','" +txtLastName.Text +"','" +txtCourseName.Text +"','"+ txtDOB.Text +"')"; 


     myOleDbConnection.Open(); 
     OleDbCommand cmd = new OleDbCommand(strSql, myOleDbConnection); 
     cmd.Parameters.AddWithValue("@Forename", txtFirstName); 
     cmd.Parameters.AddWithValue("@Surname", txtLastName); 
     cmd.Parameters.AddWithValue("@CourseName", txtCourseName); 
     cmd.Parameters.AddWithValue("@DOB", txtDOB); 

     **myOleDbCommand.ExecuteNonQuery();** } 

編輯: 謝謝大家的回覆。當我第一次開始編碼這一塊,我用下面的代碼行:

' { 
      string connectionString = 
       "provider=Microsoft.ACE.Oledb.12.0;" + 
       "data source=C:\\Users\\Botterill\\Documents\\StudentRegistrationDatabase.accdb"; 

      OleDbConnection myOleDbConnection = new OleDbConnection(connectionString); 
      OleDbCommand myOleDbCommand = myOleDbConnection.CreateCommand(); 
myOleDbConnection.Open(); 
      myOleDbCommand.CommandText = "INSERT INTO StudentDetails ([Forename],[Surname],[CourseName],[DOB],)" + 

      "VALUES('" + txtFirstName.Text + "','" + txtLastName.Text + "','" + txtCourseName.Text + "','" + txtDOB.Text + "')";' 
**myOleDbCommand.ExecuteNonQuery();** 

但是,在大膽我得到一個運行時錯誤說,有「在INSERT INTO statement'.I語法錯誤行我認爲這會在我發佈的第一個問題中所做的更改中得到糾正。任何幫助將不勝感激。謝謝凱特

+1

爲什麼添加不在那裏的參數?如果你想使用'AddWithValue'方法,你需要在你的代碼中提供'@ Forename',而不是直接插入'txtFirstName.Text' – 2013-04-10 12:19:01

回答

3

您從連接創建myOleDbCommand,然後您繼續設置cmd實例與查詢文本,然後您執行myOleDbCommand它沒有任何命令文本附加到它。

你真的想用哪個OleDbCommand實例?

此外,作爲@thorarin筆記,您應該使用命名參數(如在cmd示例中),而不是連接字符串以創建命令文本,因爲您打開應用程序時發生SQL注入攻擊。

+0

除此之外,使用命名參數是個好主意,就像OP用' cmd',但是SQL查詢沒有使用它們。使用字符串串聯,具有SQL注入的所有風險。 – Thorarin 2013-04-10 12:23:52

+0

你說得對。似乎'cmd'的東西只是從某個地方粘貼並留在那裏。 – 2013-04-10 12:25:24

+0

@ZdeslavVojkovic謝謝您的回覆!最初,當我寫這段代碼時,我用不同的方式寫了它(因爲我將編輯我的問題以顯示),只使用myOleDbCommand。但是,這也會在運行時在同一位置拋出並出現錯誤,表示插入語句中缺少語法。我最初以爲我通過添加參數來糾正它。但我真的不知道如何去做!凱特 – user2265957 2013-04-10 15:05:06

相關問題