我發送一個數據表的數據,它只是將數據插入到表中的存儲過程,但我得到一個錯誤所有行會作爲一個行存儲過程C#
過程或函數usp_InsertData有太多許多參數被指定。
當我使用事件探查器來查看正在發生的事情時,我發現所有行都作爲一行進入存儲過程。
String strConnString = ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString;
SqlConnection con = new SqlConnection();
public static void InsertData(DataTable dt)
{
String strConnString = ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString;
SqlConnection con = new SqlConnection();
con.ConnectionString = strConnString;
SqlCommand cmd = new SqlCommand();
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = ("usp_InsertData");
cmd.Connection = con;
con.Open();
for (int i = 1; i < dt.Rows.Count; i++)
{
cmd.Parameters.AddWithValue("@FirstIssue", dt.Rows[i][0].ToString());
cmd.Parameters.AddWithValue("@RTitle", dt.Rows[i][1].ToString());
cmd.Parameters.AddWithValue("@RFirstName", dt.Rows[i][2].ToString());
cmd.Parameters.AddWithValue("@RLastName", dt.Rows[i][3].ToString());
cmd.Parameters.AddWithValue("@RAddress1", dt.Rows[i][4].ToString());
cmd.Parameters.AddWithValue("@RAddress2", dt.Rows[i][5].ToString());
cmd.Parameters.AddWithValue("@RAddress3", dt.Rows[i][6].ToString());
cmd.Parameters.AddWithValue("@RCity", dt.Rows[i][7].ToString());
cmd.Parameters.AddWithValue("@RZip", dt.Rows[i][8].ToString());
cmd.Parameters.AddWithValue("@RCounty", dt.Rows[i][9].ToString());
cmd.Parameters.AddWithValue("@RCountry", dt.Rows[i][10].ToString());
cmd.Parameters.AddWithValue("@PTitle", dt.Rows[i][11].ToString());
cmd.Parameters.AddWithValue("@PFirstName", dt.Rows[i][12].ToString());
cmd.Parameters.AddWithValue("@PLastName", dt.Rows[i][13].ToString());
cmd.Parameters.AddWithValue("@PAddress1", dt.Rows[i][14].ToString());
cmd.Parameters.AddWithValue("@PAddress2", dt.Rows[i][15].ToString());
cmd.Parameters.AddWithValue("@PAddress3", dt.Rows[i][16].ToString());
cmd.Parameters.AddWithValue("@PCity", dt.Rows[i][17].ToString());
cmd.Parameters.AddWithValue("@PZip", dt.Rows[i][18].ToString());
cmd.Parameters.AddWithValue("@PCounty", dt.Rows[i][19].ToString());
cmd.Parameters.AddWithValue("@PCountry", dt.Rows[i][20].ToString());
cmd.Parameters.AddWithValue("@SubscriberAccountNumber", dt.Rows[i][21].ToString());
cmd.Parameters.AddWithValue("@OnSaleDate", dt.Rows[i][22].ToString());
cmd.Parameters.AddWithValue("@Subscriber", dt.Rows[i][23].ToString());
try
{
cmd.ExecuteNonQuery();
}
catch (Exception ex)
{
throw ex;
}
}
MessageBox.Show("data inserted");
con.Close();
con.Dispose();
}
有人可以告訴我如何解決這個問題?
此代碼應提高對第二回路異常。你不能第一次調用AddWithValue並且沒有先清除集合 – Steve
爲什麼你要這樣做兩次''SqlConnection con = new SqlConnection();'你也應該把所有的Sql對象包裝在一個'using() {}'並將for循環放入使用中或將forloop分離出來放入單獨的方法中... – MethodMan
如果您想要一個簡單的方法,它將利用正在執行的sql插入例如並解析參數我將發佈一個簡單的方法你可以使用它比你當前做的更清潔 – MethodMan