這是我的 DB 上的存盤程序。我想將串列的資料保存到我的 SQL 資料庫中,我可以保存一個資料,但是當我嘗試添加更多資料時,它會導致類似“Procedure or function Music_Add has too many arguments specified”的錯誤。有人可以幫我解決這個錯誤...謝謝...這是將串列保存到資料庫的代碼:
private void btnsave_Click(object sender, EventArgs e)
{
string username = dtuser;
conn.Open();
SqlCommand cmd = new SqlCommand("Music_Add", conn);
cmd.CommandType = CommandType.StoredProcedure;
foreach (var item in fav_list.Items)
{
cmd.Parameters.AddWithValue("@username", username);
cmd.Parameters.AddWithValue("@music", item.ToString());
cmd.ExecuteNonQuery();
}
cmd.Dispose();
conn.Close();
}
uj5u.com熱心網友回復:
考慮更像這樣的事情:
private void btnsave_Click(object sender, EventArgs e)
{
string username = dtuser;
using var cmd = new SqlCommand("Music_Add", "conn str here");
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@username", SqlDbType.VarChar, COLUMN_SIZE_HERE);
cmd.Parameters.Add("@music", SqlDbType.VarChar, COLUMN_SIZE_HERE);
cmd.Connection.Open();
foreach (var item in fav_list.Items)
{
cmd.Parameters["@username"].Value = username;
cmd.Parameters["@music"].Value = item.ToString());
cmd.ExecuteNonQuery();
}
}
- 使用SqlCommand的字串/字串版本;它是一件少處理的事情,也不會讓您陷入保留 SqlConnection 變數的誘惑;很容易忘記關閉它(或遭受例外而無法到達關閉代碼),然后您會泄漏連接。如果您在事務中注冊多個命令,您只需要攜帶 SqlConnections
- 使用
using——它不會忘記處理,即使發生錯誤 - 創建一次引數,并在引數中使用與列寬相同的大小。請參閱 Dan Guzman 的關于使用AddWithValue的博客- 我很高興看到一個實際引數化而不是冒 SQL 注入風險的問題,但請注意在某些情況下使用 AddWithValue 可能會降低性能。在這種情況下,它不太可能影響您,但通常在 SQLServer上,只需記住一條經驗法則,養成避免 AWV 的習慣,而不是嘗試找出何時安全以及何時出現問題
- 在回圈中重復設定您的值并執行查詢。您甚至可以考慮使用表值引數集進行批處理,以獲得更好的性能
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/483105.html
