我有两个表,Projects
和ProjectImages
。我想从第二个表中获取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]]到 已知的托管提供程序本机类型。
答案 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
语句,以便在使用资源后更好地处理资源。