2017-04-27 3 views
0

Webフォーム配列データセットをユーザーレコードに保存する方法をC#で確認することはできません。 SQLストアドプロシージャ。ユーザーの情報を解析してデータベースに保存できました。しかし、ユーザーが選択したデータをデータベースに保存する部分に到達したとき、壁にぶつかり、途中で見つけられないようでした。誰かがこの迷路を通して私を導くことができますか?ここでC#でWebフォームから配列データをデータベースに保存する必要があります。

は、私は、ユーザーが必要な選択をした後に保存する必要が選択のためにユーザに提供していたデータの集合である:ここで

<table> 
     <tr> 
      <td style="width:20%;"> 
       <div class="input-group date"> 
        <div class="input-group-addon"> 
         <span class="glyphicon glyphicon-duplicate addsection"></span> 
        </div> 
        <select class="form-control" id="ProductCode1" name="ProductCode[]" style="border-bottom-color:black!important;border-color:white;"> 
         <option selected>Select Product</option> 
         <option value='292' data-description='APRIL Afternoon At the Greenhouse TICKET' data-price='35.00'>AAATG</option> 
         <option value='285' data-description='APRIL AFTERNOON AT THE GREENHOUSE Ticket EARLYBIRD SPECIAL' data-price='30.00'>AAATGearlybird</option> 
         <option value='30' data-description='Organic Adzuki Beans 1/2 Lb' data-price='4.25'>AB12LB</option> 
         <option value='31' data-description='Organic Adzuki Beans 1/4 Lb' data-price='2.25'>AB14LB</option> 
         <option value='29' data-description='Organic Adzuki Beans 1 Lb' data-price='8.00'>AB1LB</option> 
         <option value='47' data-description='Organic Adzuki Seeds 1 Lb' data-price='5.00'>ABS1LB</option> 
         <option value='145' data-description='Alberto&#x27;s Lemon/Garlic Salad Dressing 16 Oz.' data-price='11.00'>Alberto&#x27;s Dressing</option> 
         <option value='241' data-description='Organic Fenugreek Sprouted Beans 4 oz.' data-price='2.00'>APRIL</option> 
         <option value='310' data-description='Organic Fenugreek Sprouted Beans 16 oz' data-price='7.75'>April16oz</option> 
         <option value='309' data-description='Organic Fenugreek Sprouted Beans 8 oz' data-price='4.00'>April8oz</option> 
        </select> 
       </div> 
      <td style="width:70%;"><input id="ProductDesc1" name="ProductDesc[]" class="form-control" style="width: 100%; border-bottom-color: black!important; border-color: white;" type="text" value="" /></td> 
      <td><input id="quantity1" name="quantity[]" class="form-control" style="width: 50px; border-bottom-color: black!important; border-color: white; text-align: center;" type="text" value="0" placeholder="1" /></td> 
      <td> 
       <input id="ProductPrice1" name="ProductPrice[]" class="form-control cost" style="width: 95px; text-align: center; border-bottom-color: black!important; border-color: white;" type="text" value="" placeholder="$0.00" /> 
      </td> 
      <td> 
       <div class="input-group-addon"> 
        <span class="glyphicon glyphicon-eject remove"></span> 
       </div> 
      </td> 
     </tr> 
    </table> 
    <table> 
     <tr> 
      <td style="width:20%;"> 
       <div class="input-group date"> 
        <div class="input-group-addon"> 
         <span class="glyphicon glyphicon-duplicate addsection"></span> 
        </div> 
        <select class="form-control" id="ProductCode2" name="ProductCode[]" style="border-bottom-color:black!important;border-color:white;"> 
         <option selected>Select Product</option> 
         <option value='292' data-description='APRIL Afternoon At the Greenhouse TICKET' data-price='35.00'>AAATG</option> 
         <option value='285' data-description='APRIL AFTERNOON AT THE GREENHOUSE Ticket EARLYBIRD SPECIAL' data-price='30.00'>AAATGearlybird</option> 
         <option value='30' data-description='Organic Adzuki Beans 1/2 Lb' data-price='4.25'>AB12LB</option> 
         <option value='31' data-description='Organic Adzuki Beans 1/4 Lb' data-price='2.25'>AB14LB</option> 
         <option value='29' data-description='Organic Adzuki Beans 1 Lb' data-price='8.00'>AB1LB</option> 
         <option value='47' data-description='Organic Adzuki Seeds 1 Lb' data-price='5.00'>ABS1LB</option> 
         <option value='145' data-description='Alberto&#x27;s Lemon/Garlic Salad Dressing 16 Oz.' data-price='11.00'>Alberto&#x27;s Dressing</option> 
         <option value='241' data-description='Organic Fenugreek Sprouted Beans 4 oz.' data-price='2.00'>APRIL</option> 
         <option value='310' data-description='Organic Fenugreek Sprouted Beans 16 oz' data-price='7.75'>April16oz</option> 
         <option value='309' data-description='Organic Fenugreek Sprouted Beans 8 oz' data-price='4.00'>April8oz</option> 
        </select> 
       </div> 
      <td style="width:70%;"><input id="ProductDesc2" name="ProductDesc[]" class="form-control" style="width: 100%; border-bottom-color: black!important; border-color: white;" type="text" value="" /></td> 
      <td><input id="quantity2" name="quantity[]" class="form-control" style="width: 50px; border-bottom-color: black!important; border-color: white; text-align: center;" type="text" value="0" placeholder="1" /></td> 
      <td> 
       <input id="ProductPrice2" name="ProductPrice[]" class="form-control cost" style="width: 95px; text-align: center; border-bottom-color: black!important; border-color: white;" type="text" value="" placeholder="$0.00" /> 
      </td> 
      <td> 
       <div class="input-group-addon"> 
        <span class="glyphicon glyphicon-eject remove"></span> 
       </div> 
      </td> 
     </tr> 
    </table> 
    <table> 
     <tr> 
      <td style="width:20%;"> 
       <div class="input-group date"> 
        <div class="input-group-addon"> 
         <span class="glyphicon glyphicon-duplicate addsection"></span> 
        </div> 
        <select class="form-control" id="ProductCode3" name="ProductCode[]" style="border-bottom-color:black!important;border-color:white;"> 
         <option selected>Select Product</option> 
         <option value='292' data-description='APRIL Afternoon At the Greenhouse TICKET' data-price='35.00'>AAATG</option> 
         <option value='285' data-description='APRIL AFTERNOON AT THE GREENHOUSE Ticket EARLYBIRD SPECIAL' data-price='30.00'>AAATGearlybird</option> 
         <option value='30' data-description='Organic Adzuki Beans 1/2 Lb' data-price='4.25'>AB12LB</option> 
         <option value='31' data-description='Organic Adzuki Beans 1/4 Lb' data-price='2.25'>AB14LB</option> 
         <option value='29' data-description='Organic Adzuki Beans 1 Lb' data-price='8.00'>AB1LB</option> 
         <option value='47' data-description='Organic Adzuki Seeds 1 Lb' data-price='5.00'>ABS1LB</option> 
         <option value='145' data-description='Alberto&#x27;s Lemon/Garlic Salad Dressing 16 Oz.' data-price='11.00'>Alberto&#x27;s Dressing</option> 
         <option value='241' data-description='Organic Fenugreek Sprouted Beans 4 oz.' data-price='2.00'>APRIL</option> 
         <option value='310' data-description='Organic Fenugreek Sprouted Beans 16 oz' data-price='7.75'>April16oz</option> 
         <option value='309' data-description='Organic Fenugreek Sprouted Beans 8 oz' data-price='4.00'>April8oz</option> 
        </select> 
       </div> 
      <td style="width:70%;"><input id="ProductDesc3" name="ProductDesc[]" class="form-control" style="width: 100%; border-bottom-color: black!important; border-color: white;" type="text" value="" /></td> 
      <td><input id="quantity3" name="quantity[]" class="form-control" style="width: 50px; border-bottom-color: black!important; border-color: white; text-align: center;" type="text" value="0" placeholder="1" /></td> 
      <td> 
       <input id="ProductPrice3" name="ProductPrice[]" class="form-control cost" style="width: 95px; text-align: center; border-bottom-color: black!important; border-color: white;" type="text" value="" placeholder="$0.00" /> 
      </td> 
      <td> 
       <div class="input-group-addon"> 
        <span class="glyphicon glyphicon-eject remove"></span> 
       </div> 
      </td> 
     </tr> 
    </table>  

は、ユニークなを持っている私のストアドプロシージャであり、請求書IDは、別のテーブル上の他のデータセットに関連する:その後

-- ============================================= 
-- Author:  JS 
-- Create date: Today 
-- Description: Save User's choices to database 
-- ============================================= 
ALTER PROCEDURE [dbo].[sp_InvoiceLineItems] @Quantity float, @UnitPrice float, @Description nvarchar(255), @LineTotal money, @LineItemCodeID int, @InvoiceID int 
AS 
BEGIN 
    -- SET NOCOUNT ON added to prevent extra result sets from 
    -- interfering with SELECT statements. 
    --- SET NOCOUNT ON; 

INSERT INTO [dbo].[ULSInvoiceLineItems] (Quantity, UnitPrice, Description, LineTotal, LineItemCodeID, InvoiceID) 
VALUES (@Quantity, @UnitPrice, @Description, @LineTotal, @LineItemCodeID, @InvoiceID) 

END 

、Iは、配列のクラスを作成した:

public class UlsinvoiceLineItems 
    { 
     public UlsinvoiceLineItems() {} 

     public UlsinvoiceLineItems(double Quantity, double UnitPrice, string Description, decimal LineTotal, int LineItemCodeID, int InvoiceID) 
     { 
      this.Quantity = Quantity; 
      this.UnitPrice = UnitPrice; 
      this.Description = Description; 
      this.LineTotal = LineTotal; 
      this.LineItemCodeID = LineItemCodeID; 
      this.InvoiceID = InvoiceID; 
     } 

     public int ID { get; set; } 
     public double? Quantity { get; set; } 
     public double? UnitPrice { get; set; } 
     public string Description { get; set; } 
     public decimal? LineTotal { get; set; } 
     public int? LineItemCodeID { get; set; } 
     public int? InvoiceID { get; set; } 
    } 

最後に、フォームから実際にデータを収集してデータベースにアップロードするセクションに到達しました。私はライトを全く持っていません。これは私がこれまで持っていたものです。成功したデータベースのアップロードには何が欠けていますか?

[HttpPost] 
    public IActionResult Invoice() 
    { 
     var result = 0; 
     if (HttpContext.Request.Form["Submit"].ToString() == "submit") 
     { 
      using (SqlConnection connection = new SqlConnection(Environment.GetEnvironmentVariable("CON__DC"))) 
      { 

       try 
       { 

        string[] Quantity = HttpContext.Request.Form["quantity"]; 
        string[] ProductPrice = HttpContext.Request.Form["ProductPrice"]; 
        string[] ProductDesc = HttpContext.Request.Form["ProductDesc"]; 
        string[] ProductCode = HttpContext.Request.Form["ProductCode"]; 

        connection.Open(); 
        SqlCommand comm = new SqlCommand("sp_InvoiceLineItems", connection); 
        comm.CommandType = CommandType.StoredProcedure; 

         comm.Parameters.AddWithValue("@Quantity", Quantity); 
         comm.Parameters.AddWithValue("@UnitPrice", ProductPrice); 
         comm.Parameters.AddWithValue("@Description", ProductDesc); 
         //comm.Parameters.AddWithValue("@LineTotal", ulinv.ProdTotal); 
         comm.Parameters.AddWithValue("@LineItemCodeID", ProductCode); 
         //comm.Parameters.AddWithValue("@InvoiceID", ulinv.InvoiceNumber); 

         result = comm.ExecuteNonQuery(); 

       } 
       catch (FormatException) 
       { 
        ViewBag.Result($"Database insert failed with: {result}"); 
        return View(); 
       } 
       finally 
       { 
        // close the Sql Connection 
        connection.Close(); 
       } 
      } 
     } 
     return View(); 
    }   

コードは、私がこれまで何をしたかでコンパイル: enter image description here

これは、プロジェクト全体が今のように見えるものです。 REDでマークされたセクションが私の質問の焦点です。

Array Section that needs to be saved to the Database

UPDATE:小さな一歩前進製

   try 
       { 
        string description = Convert.ToString(HttpContext.Request.Form["ProductDesc[]"]); 
        lItems.Description = description; 

        double Quantity = Convert.ToDouble(HttpContext.Request.Form["quantity[]"]); 
        lItems.Quantity = Convert.ToDouble(Quantity); 

        string UnitPrice = Convert.ToString(HttpContext.Request.Form["ProductPrice[]"]); 
        lItems.UnitPrice = Convert.ToDouble(UnitPrice); 

        string LineItemCodeID = Convert.ToString(HttpContext.Request.Form["ProductCode[]"]); 
        lItems.LineItemCodeID = Convert.ToInt16(LineItemCodeID); 

        connection.Open(); 
        SqlCommand comm = new SqlCommand("sp_InvoiceLineItems", connection); 
        comm.CommandType = CommandType.StoredProcedure; 

        comm.Parameters.AddWithValue("@Quantity", lItems.Quantity); 
        comm.Parameters.AddWithValue("@UnitPrice", lItems.UnitPrice); 
        comm.Parameters.AddWithValue("@Description", lItems.Description); 
        comm.Parameters.AddWithValue("@LineTotal", ulinv.ProdTotal); 
        comm.Parameters.AddWithValue("@LineItemCodeID", lItems.LineItemCodeID); 
        comm.Parameters.AddWithValue("@InvoiceID", ulinv.InvoiceNumber); 

        result = comm.ExecuteNonQuery(); 
       } 
       catch (InvalidCastException e) 
       { 
        connection.Close(); 
        ViewBag.Result($"Database insert failed with: {e}"); 
        return View(); 
       } 
       finally 
       { 
        // close the Sql Connection 
        connection.Close(); 
       } 
      } 

私は今、最初で唯一のレコードを読んでいます:私は今とき、私は、セットアップ、このようなリーダーをテキストボックスからデータを取得することができています。別の行を追加しようとすると、Description欄には両方のレコードの説明がカンマで区切られて表示されますが、タイプ2のフィールドは失敗します(不正なコンテンツに対しては拒否されます)。

誰でも配列を解析し、一意のレコード(行ごとに1つ)をパラメータとして指定するようにリーダーを構成することはできますか?

C#

string[] Quantity = HttpContext.Request.Form["quantity"]; 
string[] ProductPrice = HttpContext.Request.Form["ProductPrice"]; 
string[] ProductDesc = HttpContext.Request.Form["ProductDesc"]; 
string[] ProductCode = HttpContext.Request.Form["ProductCode"]; 

HttpContext.Request.Formまず

+0

使用可能なさまざまなORMで作業するのではなく、実際にSQLで直接作業することをお勧めします。ただし、この例では 'SET NOCOUNT ON'指示文は必要ありません。これを取り除くことは、あなたが 'result = comm.ExecuteNonQuery();'行の呼び出しコマンドにSQLから_Rows Affected_値を戻すときに、これを取り除くことになります。もちろん、私は盲目的であり、_result_がどこに定義されているのかわかりません。 –

+0

詳細については、コンストラクタ全体を追加しました。その特定のプロジェクトで私がこれまで行ってきたことを定義するのに役立つことを願っています。 – Johnny

+0

@Mad Myche、これらのORMの1つをお勧めしますか?ご協力いただきありがとうございます。 – Johnny

答えて

0

は、(here参照)NameValueCollectionする側にコレクションを任意の値にアクセスする場合、したがって、結果になりますstringは、string[]ではありません。あなたのプロジェクトは、そのコードブロックでコンパイルするべきではありません。

質問

はあなたのコードがEVENコンパイルしていますか?

+0

はい、これまでのやり方でコンパイルして、これまでに受け取ったコメントから調整しました。 HttpContext.Request.Formは、私のプロジェクトの一部からユーザーデータを保存するために働いています。だから私はそれを上に構築すると思った。 – Johnny

関連する問題