我想在一个按钮button1_click中在两个表中进行更新

时间:2014-09-26 15:46:36

标签: c# asp.net sql-server-2008

我有两个表,ProjectsProjectImages。我想从第二个表中获取image_id。这是我目前的代码:

SqlConnection con = new SqlConnection(" Data Source = .; Initial Catalog = Waves; Integrated Security = true;");

    SqlCommand com = new SqlCommand("Update_Project", con);
    com.CommandType = CommandType.StoredProcedure;
    com.Parameters.AddWithValue("@ProjectID",Label1.Text);
    com.Parameters.AddWithValue("@ProjectName",txtName.Text);
    com.Parameters.AddWithValue("@VideoUrl", txtName.Text);
    com.Parameters.AddWithValue("@Notes", txtName.Text);
    com.Parameters.AddWithValue("@Date",DateTime.Now.Date);
    WavesEntities wee = new WavesEntities();
    var query = from p in wee.Project_Images
                select p.img_Id;
    SqlCommand com1 = new SqlCommand("UpdateProjectImages", con);
    com.CommandType = CommandType.StoredProcedure;


    com.Parameters.AddWithValue("@img_id", query.AsEnumerable());
    com.Parameters.AddWithValue("@img_path", con);
    con.Open();
    com.ExecuteNonQuery();
    con.Close();

错误:

  

对象类型不存在映射   System.Data.Objects.ObjectQuery`1 [[System.Int32,mscorlib,   Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089]]到   已知的托管提供程序本机类型。

2 个答案:

答案 0 :(得分:0)

编辑:看到您的修改后,您的问题可能会出现问题,但您仍可以尝试我的回答。

编辑2:命令2中的参数引用命令1.将参数更改为:

com1.Parameters.AddWithValue("@img_id", query.AsEnumerable());
com1.Parameters.AddWithValue("@img_path", con);

你的问题是你不能为两个" alive"使用相同的SqlConnection。 SqlCommands。

将您的代码更改为以下内容:

using(SqlConnection con = new SqlConnection("Data Source=.;Initial Catalog=Waves;Integrated Security=true;"))
{
    con.Open();

    using(SqlCommand com = new SqlCommand("Update_Project", con))
    {
        com.CommandType = CommandType.StoredProcedure;
        com.Parameters.AddWithValue("@ProjectID",Label1.Text);
        com.Parameters.AddWithValue("@ProjectName",txtName.Text);
        com.Parameters.AddWithValue("@VideoUrl", txtName.Text);
        com.Parameters.AddWithValue("@Notes", txtName.Text);
        com.Parameters.AddWithValue("@Date",DateTime.Now.Date);
        WavesEntities wee = new WavesEntities();
        var query = from p in wee.Project_Images
                    select p.img_Id;
    }

    using(SqlCommand com1 = new SqlCommand("UpdateProjectImages", con))
    {
        com.CommandType = CommandType.StoredProcedure;


        com.Parameters.AddWithValue("@img_id", query.AsEnumerable());
        com.Parameters.AddWithValue("@img_path", con);
        con.Open();
        com.ExecuteNonQuery();
    }
}

答案 1 :(得分:0)

我认为您需要从img_id方法获取相应ProjectID的{​​{1}},然后将单个检索到的值(wee.Project_Images)传递给存储过程以进行更新。所以你的img_id会变成

query

请注意,您无法将 var query1 = from p in wee.Project_Images where p.ProjectID == Label1.Text select p.img_id; com.Parameters.AddWithValue("@img_id", query); 对象作为参数传递给存储过程。另外,请不要忘记对Enumerable()using对象使用SqlConnection语句,以便在使用资源后更好地处理资源。