2017-09-22 13 views
0

SQLテーブルから選択したデータを取得して電子メール本文に追加する便利なコードを用意しました。それは(スタックオーバーフローの天才の助けを借りて)複数のレコードを返し、それらを電子メールのボディに非常にうまくグループ化します。問題は電子メールフィールドです。もちろん、それはFor eachループ内にあり、そのレコードの複数のインスタンスを返します。これらのインスタンスは、電子メールのToフィールドに書き込まれます。このレコードは常に同じで、変数(eml)に1つのインスタンスしか書き込まれません。私はこれが簡単だろうと推測していますが、私はもう一度クエリを実行することができません。SqlDataAdapterコードから単一の文字列変数を取得する方法

string str = @"Data Source=srvr;Initial Catalog=db;Integrated 
    Security=True"; 
     SqlConnection scn; 
     SqlDataAdapter da; 
     DataSet ds; 


     salesOrdersTableAdapter.SO(_TST_TWIDataSet.SalesOrders); 


     scn = new SqlConnection(str); 
     da = new SqlDataAdapter("SELECT DISTINCT DATEADD (dd, DATEDIFF(dd,0,ShipDate),0) AS ShipDate,RTRIM(SalesOrder) AS [Sales Order], RTRIM(PartNum) AS [Part Number]," + 
      "RTRIM(Description) AS Description,RTRIM(DueQty) AS Quantity,RTRIM(CustPartNum) AS[Customer Part No], RTRIM(CustPo) AS[Customer PO], " + 
           "RTRIM(CustRev) AS[Customer Rev], RTRIM(email) AS [Email] " + 
           "FROM tbl WHERE Ack <> 'Y'AND SalesOrder =" + MyGlobals.ord, scn); 
     ds = new DataSet();da.Fill(ds, "SalesOrders"); 


     var orderListBody = new StringBuilder(); 

     var sbj = string.Empty; 
     foreach (DataRow Row in ds.Tables["SalesOrders"].Rows) 
     { 
      orderListBody.Append("Order Number " + Row["Sales Order"] + "<br />"); 
      orderListBody.Append("Part Number: " + Row["Part Number"] + "<br />"); 
      orderListBody.Append("Description: " + Row["Description"] + "<br />"); 
      orderListBody.Append("Customer Part Number: " + Row["Customer Part No"] + "<br />"); 
      orderListBody.Append("Customer Revision: " + Row["Customer Rev"] + "<br />"); 
      DateTime dte = DateTime.Now; 
      orderListBody.Append("Expected Ship Date: " + dte.ToShortDateString() + "<br />"); 
      orderListBody.Append("Quantity: " + Row["Quantity"] + "<br />"); 
      orderListBody.Append("<br />"); 
      // eml += Row["Email"]; 
      sbj = "Order Acknowledgement for your PO " + Row["Customer PO"]; 
     } 

事前

+0

は '+'を削除します。 'EML =ロウ[ "電子メール"];'? –

+0

申し訳ありません - コメントが分かりません。私はその声明を述べましたが、電子メールのTo:フィールドの変数が必要です –

+0

はい、この 'Email'の結果の列はすべての行で同じと言いました。したがって、常に' eml'を '[Row [ Email "]' 'foreach'の後に、最後の行の' Email'値は 'eml'にあり、' To: 'フィールドに使うことができます。あなたの現在のコード( '/'を除く)では、各行の電子メールを 'eml'に追加します。 –

答えて

1

でのおかげでちょうど行インデクサによって返さobjectToString()を呼び出す:

eml = Row["Email"].ToString(); 
関連する問題