2013-06-28 18 views
1

當我嘗試使用參數向我的SQL Server數據庫中插入一個值時,出現以下錯誤。SqlParameter不能與INSERT語句一起使用

SqlParameter Param1 = new SqlParameter("@test", SqlDbType.VarChar); 
Param1.Value = "test"; 

SqlCommand AddtoDb = new SqlCommand("INSERT INTO [temp] VALUES (@test)", conn); 
AddtoDb.ExecuteNonQuery(); 

這是錯誤我得到:

類型 'System.Data.SqlClient.SqlException' 的第一次機會異常出現在system.data.dll

數據庫只有1列接受varChar(50)。我知道連接工作,因爲數據庫收到輸入,如果我做類似的事情:

SqlCommand AddtoDb = new SqlCommand("INSERT INTO [temp] VALUES ('test')", conn); 
AddtoDb.ExecuteNonQuery(); 

我在做什麼錯了?

+0

請包括填充錯誤文本,當execption在調試器顯示出來單擊[複製到Clipbord](HTTP://blogs.msdn .com/blogfiles/saraford/WindowsLiveWriter/Didyouknowyoucancopytheexceptiondetailsw_F67C/image_2.png)鏈接,然後將文本粘貼到一組'

'標籤中。你已經遺漏了一些細節,讓我們有機會弄清楚出了什麼問題。 –
                        
                            
                                
                            
                        
                    

回答

8

您創建了該參數,但您並未以任何方式將其與該命令實際關聯。您需要將參數添加到命令的Parameters集合:

SqlCommand AddtoDb = new SqlCommand("INSERT INTO [temp] VALUES (@test)", conn); 
SqlParameter Param1 = new SqlParameter("@test", SqlDbType.VarChar); 
Param1.Value = "test"; 
AddtoDb.Parameters.Add(Param1); 
AddtoDb.ExecuteNonQuery(); 

或者更簡單地說:

SqlCommand AddtoDb = new SqlCommand("INSERT INTO [temp] VALUES (@test)", conn); 
AddtoDb.Parameters.AddWithValue("@test", "test"); 
AddtoDb.ExecuteNonQuery(); 
+0

只是一個簡單的問題,但是這個名字不應該被忽略嗎?我教過它是自動添加的。 – Silvermind

+1

@Silvermind號應該包括它。從[文檔](http://msdn.microsoft.com/zh-cn/library/system.data.sqlclient.sqlparameter.parametername.aspx):「* ParameterName以」@ paramname'形式指定。必須在執行依賴於參數的SqlCommand之前設置ParameterName。*「 –

2

你是不是你的SqlParameter對象與SqlCommand對象相關聯。

嘗試增加線3和4之間的該行:

AddtoDb.Parameters.Add(Param1);