我有一個for循環,它從我的C#web表單收集數據,並通過存儲過程將它找到的每個項目寫入數據庫。For循環只寫入我的mssql存儲過程一次?
我遇到的問題是它只寫入數據庫一次。我已經瀏覽了visual studio中的代碼並插入了測試變量,以檢查所有數據是否存在並正在被捕獲。還因爲第一次我知道存儲過程正常運行。
所以我認爲這個問題可能與我如何在for循環中獲得try catch有關?
或者完全可能是其他的東西 - 我真的可以用一雙新鮮的眼睛和某人指引我朝着正確的方向!
protected void log_hd_number()
{
////write results to DB.
SqlConnection conn = new SqlConnection("Data Source=;Initial Catalog=;Integrated Security=True");
SqlCommand cmd = conn.CreateCommand();
SqlDataReader reader;
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "insert_requested_hd";
Dictionary<String, String> hdSize = new Dictionary<String, String>();
hdSize.Add("hardDiskSizeData1", hardDiskSizeData1.Text);
hdSize.Add("hardDiskSizeData2", hardDiskSizeData2.Text);
int numberRequested = 2;
for (int i = 1; i <= numberRequested; i++)
{
cmd.Parameters.AddWithValue("@hd_size", hdSize["hardDiskSizeData" + i]);
cmd.Parameters.AddWithValue("@number_requested", numberRequested);
cmd.Parameters.AddWithValue("@vm_id", 15);
try
{
conn.Open();
reader = cmd.ExecuteReader();
reader.Close();
}
catch (Exception exc)
{
}
finally
{
if (conn.State != ConnectionState.Closed)
conn.Close();
}
}
}
編輯:
SP:
ALTER PROCEDURE [dbo].[insert_requested_hd]
-- Add the parameters for the stored procedure here
@hd_size nvarchar(150),
@number_requested int,
@vm_id int
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for procedure here
INSERT INTO dbo.hard_disk_size
(
hd_size,
number_requested,
vm_id
)
VALUES
(
@hd_size,
@number_requested,
@vm_id
)
你有沒有一行一行的調試代碼?檢查for循環中的「我」的值? –
你爲什麼要做ExecuteReader()?你只是想要ExecuteNonQuery() –
@hannan是我已經通過了正確的次數 – hlh3406