2013-01-15 22 views
0

的新专栏中,我添加了一个列到我的datatable,并添加值,根据条件的列,但该值不添加到datatable(即使有应该值)值到泰丰集

这是代码的一部分,我用

conn = new OleDbConnection(@"Provider=Microsoft.Jet.OleDb.4.0; 
           Data Source =" + Server.MapPath("App_Data\\LR Product Database 2000.mdb")); 
     conn.Open(); 

     Dictionary<string, string> items = new Dictionary<string, string>(); 
     OleDbCommand cmd = conn.CreateCommand(); 
     cmd.CommandText = "SELECT CODE, TITLE FROM tblProducts"; 

     OleDbDataReader dbread = cmd.ExecuteReader(); 

     while (dbread.Read()) 
     { 
      productCode = (string)dbread["CODE"]; 
      productTitle = (string)dbread["TITLE"]; 
      System.Diagnostics.Debug.Write(productCode + " "); 
      items.Add(productCode, productTitle); 
     } 

     sqlCon = new SqlConnection(ConfigurationManager.ConnectionStrings["LRVWebsite"].ToString()); 
     sqlCon.Open(); 
     dsSql = new DataSet(); 
     SqlDataAdapter dba = new SqlDataAdapter(@"SELECT C.CustomerFirstName,C.CustomerLastName, C.CustomerCompany,C.CustomerPosition,C.CustomerCountry,C.CustomerProvince,C.CustomerContact,CP.ActionDate,CP.ProductCode,CP.CustomerEmail FROM tblCustomers C INNER JOIN tblCustomerProducts CP ON C.CustomerEmail = CP.CustomerEmail ORDER BY ActionDate DESC", connString); 
     dba.Fill(dsSql,"Products"); 
     DataTable dt = dsSql.Tables["Products"]; 
     dt.Columns.Add("Title", typeof(string)); 

     foreach (DataRow dr in dt.Rows) 
     { 
      if(items.ContainsKey(dr["ProductCode"].ToString())) 
      { 

       dr["Title"] = items[dr["ProductCode"].ToString()]; 

      } 
     } 

我怎样才能添加值基于条件的新列。

回答

1

可以缩短第一部分(+使用using),并使用Enumerable.Join

DataTable tblAccess = new DataTable(); 
using(var con = new OleDbConnection(@"Provider=Microsoft.Jet.OleDb.4.0;Data Source =" + Server.MapPath("App_Data\\LR Product Database 2000.mdb")) 
using(var da = new OleDbDataAdapter("SELECT CODE, TITLE FROM tblProducts", con)) 
{ 
    da.Fill(tblAccess); 
} 

DataTable tblSqlServer = new DataTable(); 
using(var con = new SqlConnection(ConfigurationManager.ConnectionStrings["LRVWebsite"].ToString())) 
using(var da = new SqlDataAdapter("SELECT C.CustomerFirstName,C.CustomerLastName, C.CustomerCompany,C.CustomerPosition,C.CustomerCountry,C.CustomerProvince,C.CustomerContact,CP.ActionDate,CP.ProductCode,CP.CustomerEmail FROM tblCustomers C INNER JOIN tblCustomerProducts CP ON C.CustomerEmail = CP.CustomerEmail ORDER BY ActionDate DESC", con)) 
{ 
    da.Fill(tblSqlServer); 
} 

现在很容易加入Linq-To-DataSet这两个表,并获得您的sql服务器行的新标题:

var both = from rowSql in tblSqlServer.AsEnumerable() 
      join rowAcc in tblAccess.AsEnumerable() 
      on rowSql.Field<string>("ProductCode") equals rowAcc.Field<string>("ProductCode") 
      select new { rowSql = rowSql, newTitle = rowAcc.Field<string>("Title") }; 

foreach (var x in both) 
{ 
    x.rowSql.SetField("Title", x.newTitle); 
} 
1

你可以这样做,在选择'' AS Title中创建一个空列然后填充它。你也可以把你的逻辑在SQL(加入到项目表。):

SqlDataAdapter dba = new SqlDataAdapter(@"SELECT '' as Title, C.CustomerFirstName,C.CustomerLastName, C.CustomerCompany,C.CustomerPosition,C.CustomerCountry,C.CustomerProvince,C.CustomerContact,CP.ActionDate,CP.ProductCode,CP.CustomerEmail FROM tblCustomers C INNER JOIN tblCustomerProducts CP ON C.CustomerEmail = CP.CustomerEmail ORDER BY ActionDate DESC", connString); 
    dba.Fill(dsSql,"Products"); 
    DataTable dt = dsSql.Tables["Products"]; 

    foreach (DataRow dr in dt.Rows) 
    { 
     if(items.ContainsKey(dr["ProductCode"].ToString())) 
     { 

      dr["Title"] = items[dr["ProductCode"].ToString()]; 

     } 
    }