2016-03-16 36 views
0

我努力讓此功能工作,因爲它保持了INSERT INTO陳述但是相同的代碼工作的另一頁/表單中的標記語法錯誤由於完成...誰能幫幫我?保存函數形式而不是一個語法錯誤

它似乎有另一種形式在這個問題上,現在也不過,我看不出有什麼不對的地方......

private void btnAssign_Click(object sender, EventArgs e) 
{ 
     string LocID = txtLocID.Text; 
     string AssID = txtAssID.Text; // declaing instance names 
     string StaID = txtID.Text; 
     string Sku = txtSKU.Text; 

     if (txtLocID.Text.Length < 1) // validating a text box 
     { 
      MessageBox.Show("Please Enter an Location ID"); 
     } 
     else if (txtAssID.Text.Length < 1) 
     { 
      MessageBox.Show("Please Enter an Assignment ID"); 
     } 
     else if (txtID.Text.Length < 1) 
     { 
      MessageBox.Show("Please Enter a Staff ID"); 
     } 
     else if (txtSKU.Text.Length < 1) 
     { 
      MessageBox.Show("Please Enter a Product SKU"); 
     } 
     else 
     { 
      try 
      { 
       int Loc; 
       Cons.ConnectionString = ConnectionDetail.Warehouse; 

       OleDbCommand cmds = new OleDbCommand(); 
       Cons.Open(); 
       cmds.CommandText = @"Insert into Assign (Location ID, Assign ID, Staff ID, SKU) VALUES (@LocID, @AssID, @StaID, @Sku)"; 
       cmds.Connection = Cons; 

       cmds.Parameters.AddWithValue("LocID", LocID); 
       cmds.Parameters.AddWithValue("AssID", AssID); 
       cmds.Parameters.AddWithValue("StaID", StaID); 
       cmds.Parameters.AddWithValue("Sku", Sku); 

       Loc = cmds.ExecuteNonQuery(); 

       if (Loc > 0) 
        MessageBox.Show("Location has successfully been assigned a product and Saved"); 
      } 
      catch (Exception err) 
      { 
       MessageBox.Show("error:" + Environment.NewLine + err.Message); 
      } 
      finally 
      { 
       if (Cons.State == ConnectionState.Open) 
        Cons.Close(); 
      } 
     } 
} 
+0

能否請您發佈錯誤消息嗎? –

+0

錯誤:INSERT INTO語句中的語法錯誤。 –

+1

列名中有空格。我認爲你需要解決這個問題。 – crunchy

回答

3

當列名包含需要方括號它們封裝空間爲了避免混淆數據庫解析器

cmds.CommandText = @"Insert into Assign ([Location ID], [Assign ID], 
        [Staff ID], SKU) VALUES (@LocID, @AssID, @StaID, @Sku)"; 

我也建議避免使用AddWithValue,因爲它可能有意想不到的副作用見Can we stop using AddWithValue already?

例如: 我假設地點標識是一個數字字段(可能是一個整數)。 AddWithValue不知道這一點。它將看到一個字符串作爲參數值傳遞。所以參數作爲字符串傳遞。數據庫引擎需要將其轉換回由現場期望的類型和這種轉換可以做得正確(如可能與一個簡單的轉換髮生的全數字爲整數字符串)或正好一個可能產生無效的值有很多DateTime值。
最好是要明確

int locID; 
if(!Int32.TryParse(txtLocID.Text, out locID)) 
    MessageBox("Not a valid location number!"); 

...... 
cmds.Parameters.Add("LocID", OleDbType.Integer).Value = locID; 
+0

感謝這麼多,這是嚴重刺激我 –

1
INSERT into Assign([Location ID], [Assign ID] ...) values ... 

在SQL你必須把列/表/ ...在括號中的名字是否含有空格或其他特殊字符。

+0

感謝這麼多,這是嚴重刺激我 –

相關問題