2011-09-22 174 views
1

我有一個在正常條件下工作的SQL Insert Into命令。這意味着如果我填入每個文本框,數據將發送到數據庫(Acces數據庫)。MS Access的INSERT INTO語句中的語法錯誤

但是,當我'忘記'1文本框,我收到「INSERT INTO語句中的語法錯誤。」 你如何避免這種情況?

string commandPerson = "Insert into Person (LastName,FirstName,DateOfBirth,Phone,Email,AdditionalInfo, Hobbies, CVinDropBOX, Informationrequest) values('" + txtLastN.Text + "','" + txtFirstN.Text + "'," + txtDOB.Text + ",'" + txtPhone.Text + "','" + txtEmail.Text + "','" + txtAdditionalInfo.Text + "','" + txtHobbies.Text + "'," + chkCVDROPBOX.Checked + "," + chkInformation.Checked + ")"; 

當每個文本框有一個值時,沒有問題。 只有當我離開1名或2的文本框爲空,錯誤消息顯示: 語法錯誤INSERT INTO語句中

+0

無結晶在這裏球所以如果你不顯示任何代碼,沒有人知道你在做什麼細節。 (''+ Convert.ToDateTime(txtDOB.Text).toString()+「')試試這個( –

回答

3

使用參數化的做法,不僅是對SQL注入安全的,但也讓你解決你的問題,因爲當不提供時,您將設置參數值爲NULL(或string.empty)。

這裏一個例子:

string ConnString = Utils.GetConnString(); 
string SqlString = "Insert Into Contacts (FirstName, LastName) Values (?,?)"; 
using (OleDbConnection conn = new OleDbConnection(ConnString)) 
{ 
    using (OleDbCommand cmd = new OleDbCommand(SqlString, conn)) 
    { 
    cmd.CommandType = CommandType.Text; 
    cmd.Parameters.AddWithValue("FirstName", txtFirstName.Text); 
    cmd.Parameters.AddWithValue("LastName", txtLastName.Text); 
    conn.Open(); 
    cmd.ExecuteNonQuery(); 
    } 
} 

,並在這裏爲文章全文:http://www.mikesdotnetting.com/Article/26/Parameter-Queries-in-ASP.NET-with-MS-Access

1

嘗試一下本作的DOB(你缺少的單引號):

'" + txtDOB.Text + "'. 
+0

) –

相關問題