循环结构使用addwithValue验证数据
我的LINQ知识还可以。我需要一个循环或完成ADO.NET方法,另一种方法(见foreach
循环)循环结构使用addwithValue验证数据
public bool AccessProcess(string sp, ListDictionary ld, CommandType cmdType)
{
SqlConnection con = new SqlConnection(
WebConfigurationManager.ConnectionStrings["conn"].ToString());
SqlCommand cmd = new SqlCommand(sp, con);
try
{
con.Open();
cmd.CommandType = cmdType;
foreach (string ky in ld.Keys)
{
cmd.Parameters.AddWithValue(ky, ld[ky]);
}
cmd.ExecuteNonQuery();
}
finally
{
con.Dispose();
cmd.Dispose();
}
return true;
}
我需要:
foreach (string ky in ld.Keys)
yourObject.SetPropertyValue(ky, ld[ky]);
我怎么能这样做?我可以使用LINQ到SQL吗?
你能到SQL地图数据类(通常称为“实体”),以一个SQL数据库表给出明确的样品一样
using (var contex = new DataclassContext())
foreach (string ky in ld.Keys)
{
contex.Parameters.AddWithValue(ky, ld[ky]);
}
contex.SubmitChanges();
Linq的。
因此,首先您需要使用Linq-> SQL设计器为您生成这些数据类,以及一个DataContext对象,它将这些类映射到数据库以及从数据库映射这些类。
您通常在Visual Studio中的Linq to SQL设计器UI中定义此映射。这个UI让你直观地编辑一个.dbml文件,从本质上定义你的CLR实体对象和后备SQL数据库表之间的映射。
See this MSDN article有关如何将新的Linq添加到SQL类的示例。
一旦你定义了这个类,你可以创建这个类的新实例及其属性值。这些属性值被映射到SQL数据库表中的列。然后将该对象传递给由LINQ to SQL生成的DataContext类,以向数据库中的表添加新行。
所以,你会做这样的事情:
For a database table with columns "ColumnA", "ColumnB" and "ColumnC"
var myEntity = new EntityObject { ColumnA = "valueA", ColumnB = "valueB", "ColumnC" = "valueC" };
DataContext.InsertOnSubmit(myEntity);
DataContext.SubmitChanges();
这将插入新行与指定的列值的数据库。
现在,如果你不想手动编写代码来写ColumnA,ColumnB,等等,那么你可以使用反射来写对实体相应的属性:
例如,实体实例“ myEntity所“:
var properties = myEntity.GetType().GetProperties();
foreach (string ky in ld.Keys)
{
var matchingProperty = properties.Where(p => p.Name.Equals(ky)).FirstOrDefault();
if (matchingProperty != null)
{
matchingProperty.SetValue(myEntity, ld[ky], null);
}
}
使用反射不给最好的表现,所以我会问,为什么你甚至想键和值的数组映射到linq-> SQL实体,而不是使用实体对象直接在当前生成这些键/值对的代码中。
我们可以做到吗? (var myEntity = new EntityObject()) foreach(ld.Keys中的字符串ky) { myEntity .Parameters.AddWithValue(ky,ld [ky]); } 我nee它,我不想写列a,b,c,d,..。 ..。 z – Penguen 2010-07-04 12:35:54
我已经更新了答案,显示了如何使用反射来实现此目的。然而,我认为你应该重新思考为什么你要在你的方法之间传递一组键/值对,而不是直接传递LINQ-> SQL实体对象。 – Sam 2010-07-04 12:49:11
沙克斯很多我会做到这一点。比我发布结果thaks toooo多 – Penguen 2010-07-04 12:56:58
你能解释一下你实际上想要用这个代码吗?您是否试图向数据库中插入新行,或更新现有行? – Sam 2010-07-04 11:38:21
是的,我尝试在linqtoSql中使用AddwithValue方法添加新行? – Penguen 2010-07-04 12:01:25