1

这是我到目前为止所拥有的:

Veza.Open();
SqlCommand zadnjaN = new SqlCommand("SELECT TOP 1 id_n FROM Narudzba ORDER BY id_n DESC", Veza);
var id_zn = zadnjaN.ExecuteScalar(); //get 1 value for id_zn (last one entered)
List<int> proizvodi = new List<int>();
proizvodi = (List<int>)Session["kosarica"];
SqlCommand kupnja1 = new SqlCommand("INSERT INTO NarudzbaItemi ([narudzbaID], [proizvodID]) VALUES (@id_zn, @pro)", Veza);
for (int i = 0; i < proizvodi.Count; i++)
{
  kupnja1.Parameters.AddWithValue("pro", proizvodi[i]); //also tried @pro
  kupnja1.Parameters.AddWithValue("id_zn", id_zn); //@id_zn
  kupnja1.ExecuteNonQuery();
}
Veza.Close();

我收到一条消息说变量名@pro 已经被声明。关键是,我需要在 proizvodID 列中插入一个 int 项列表,但是我在该列中插入一个值很多次我需要在 narudzbaID 列中插入一个不变的值,我从另一个表中获得最后增加的价值。所有 3 列都是 int,Session 是 List int。使用 asp.net、c#、sql server 2008。

4

3 回答 3

3

您不断在循环中添加参数。在第二次迭代中,@pro 定义。

试试这个:

Veza.Open();
object id_zn; //get 1 value for id_zn (last one entered)
using (SqlCommand zadnjaN = new SqlCommand("SELECT TOP 1 id_n FROM Narudzba ORDER BY id_n DESC", Veza))
{
    id_zn = zadnjaN.ExecuteScalar();
}
List<int> proizvodi = (List<int>)Session["kosarica"];
using (SqlCommand kupnja1 = new SqlCommand("INSERT INTO NarudzbaItemi ([narudzbaID], [proizvodID]) VALUES (@id_zn, @pro)", Veza))
{
    kupnja1.Parameters.Add("pro"); 
    kupnja1.Parameters.Add("id_zn");
    for (int i = 0; i < proizvodi.Count; i++)
    {
        kupnja1.Parameters["pro"].Value = proizvodi[i]; //also tried @pro
        kupnja1.Parameters["id_zn"].Value = id_zn; //@id_zn
        kupnja1.ExecuteNonQuery();
    }
}
Veza.Close();
于 2012-09-07T09:08:28.690 回答
1

在这里你可以如何做到这一点。但我认为约翰桑德斯的方法更好

    for (int i = 0; i < proizvodi.Count; i++)
    {
        //Add this line to clear parameters
        kupnja1.Parameters.Clear();
        kupnja1.Parameters.AddWithValue("pro", proizvodi[i]); //also tried @pro
        kupnja1.Parameters.AddWithValue("id_zn", id_zn); //@id_zn
        kupnja1.ExecuteNonQuery();
    }
于 2012-09-07T09:18:49.770 回答
0

这基本上是说你不能继续重用相同的命令,这应该可以工作,将声明移动到循环中:

    Veza.Open();
    SqlCommand zadnjaN = new SqlCommand("SELECT TOP 1 id_n FROM Narudzba ORDER BY id_n DESC", Veza);
    var id_zn = zadnjaN.ExecuteScalar(); //get 1 value for id_zn (last one entered)
    List<int> proizvodi = new List<int>();
    proizvodi = (List<int>)Session["kosarica"];

    for (int i = 0; i < proizvodi.Count; i++)
    {
        SqlCommand kupnja1 = new SqlCommand("INSERT INTO NarudzbaItemi ([narudzbaID], [proizvodID]) VALUES (@id_zn, @pro)", Veza);
        kupnja1.Parameters.AddWithValue("pro", proizvodi[i]); //also tried @pro
        kupnja1.Parameters.AddWithValue("id_zn", id_zn); //@id_zn
        kupnja1.ExecuteNonQuery();
    }
    Veza.Close();
于 2012-09-07T09:08:41.413 回答