Problem from yesterday ...仍然無法排序。檢索並分配組合框值到存儲過程參數
已經經歷了一百萬個帖子和視頻,但找不到指出我做錯了什麼的人。我基本上想要檢索並分配組合框的值,並將其發送到SQL存儲過程的參數。我被指責沒有提供足夠的代碼昨天所以這裏有一點更詳細。
SqlConnection _connection;
SqlCommand _command;
_connection = new SqlConnection(@"Data Source=someserver;Initial Catalog=sometable;Integrated Security=True");
_connection.Open();
_command = _connection.CreateCommand();
_command.CommandType = CommandType.StoredProcedure;
private void SelectedIndexChanged(object sender, EventArgs e)
{
try
{
_command.CommandText = "someprocedurename";
_command.Parameters.Add("@someparameter", SqlDbType.NVarChar).Value = combobox1.SelectedItem.ToString();
_command.ExecuteNonQuery();
}
catch (Exception)
{
MessageBox.Show("Error", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
finally
{
_connection.Close();
}
}
會發生什麼:當我在組合框中選擇該項目,它首先會自動彈出錯誤信息,那麼就說明框中的項目,但顯然它的價值沒有得到傳遞給@someparameter
,或者至少存儲過程沒有被觸發。在SQL中編寫和測試的存儲過程起作用 - 問題出在C#代碼中。我知道這可能是很多專業人士的蹩腳問題,但請考慮我已經完成了我的研究。請儘可能具體 - 不要在這裏受到批評,但要提高我的新手技能。謝謝。
C#,Windows窗體
編輯:
catch塊被修改爲亨利爵士建議。
和移動_connection.Open後();進入try塊,
差不多跆拳道......
編輯2:
看來問題沒有了,感謝亨利爵士。我現在需要弄清楚的是,如何根據第一個組合框的值調用的存儲過程來填充第二個組合框。這是怎樣的代碼看起來像現在:
private void SelectedIndexChanged(object sender, EventArgs e)
{
using (SqlConnection _connection =
new SqlConnection(@"Data Source=someserver;Initial Catalog=sometable;Integrated Security=True"))
try
{
_connection.Open();
SqlCommand _command = new SqlCommand("someprocedurename", _connection);
_command.CommandType = CommandType.StoredProcedure;
_command.Parameters.Add("@someparameter", SqlDbType.NVarChar).Value = combobox1.SelectedValue.ToString();
_command.ExecuteNonQuery();
/* i guess this is the part where i should "inform" combobox2 about the
result of the stored procedure, based on combobox1. have no idea though,
how it could be done. maybe i need a dataset? clueless. just to be clear:
if value "a" was selected in combobox1, i want to populate combobox2 with
the value "1". if value "b" was selected in combobox1, i want to populate
combobox2 with the value "2". etc. */
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
首先你應該找出異常。我想這可能是命令或連接的問題。對於這個重寫catch塊catch(Exception ex) MessageBox.Show(ex.ToString(),「Error」,MessageBoxButtons.OK,MessageBoxIcon.Error); }然後在您的問題 –
中發佈例外情況,對於遲到的回覆感到抱歉 - 星期五關閉了,但現在我回來了,並且已經做了必要的更改。請參閱問題中的編輯。謝謝 – stuckedagain
你的問題是_connection.Close();在終於阻止。連接通常有兩種類型的全局或本地(工作單元)。環球始終是開放的,以當地方式關閉它是不好的做法。本地已在方法主體中初始化,您應該關閉連接或使用(){} insructon –