尝试使用c#保存数据库中的数据数组

时间:2018-01-02 05:58:33

标签: c# sql asp.net oracle ado.net

我试图在数据库中保存数据如何实现它。

我有一个表单,其中有三个输入PRODUCT_ID,TDC_NO,REVISION以及动态生成的数组值列表(sizeMin,sizeMax,tolMin,tolMax)。我想将这些动态生成的值存储在Prop_detail中,我在下面提到的结构和tdcProduct1表中的PRODUCT_ID,TDC_NO,REVISION值,我在下面设计的结构如何传递来自那些数组的值列表服务器端到数据库。以及如何在数据库中进一步存储。

的.aspx

<script type="text/javascript">
  $(document).on("click", "[id*=btnFrmSubmit]", function () {   
var user = {};
                user.PRODUCT_ID = 1;
                user.TDC_NO = $("[id*=Tdc_No]").val();
                user.REVISION = $("#Revision").text();
/* Creating Array object as WireDimDetails to add in user object*/
                var WireDimDetails = new Array();
                $("#WireDimTbl tbody tr").each(function () {
                    var row = $(this);
                    /* Declare and sets the WireDimDetail object with the property which will add in WireDimDetails array object*/
                    var WireDimDetail = {};
                    var sizeMin = row.find("[id^=SizeMin]").val();
                    /* Checking if control exist or not else assign empty value in sizeMax*/
                    var sizeMax = row.find("[id^=SizeMax]") != "undefined" ? row.find("[id^=SizeMax]").val() : "";
                    var tolMin = row.find("[id^=TolMin]").val();
                    var tolMax = row.find("[id^=TolMax]").val();
                    /*Sets the Values of controls */
                    WireDimDetail.SizeMin = sizeMin;
                    WireDimDetail.SizeMax = sizeMax;
                    WireDimDetail.TolMin = tolMin;
                    WireDimDetail.TolMax = tolMax;
                    /*Add WireDimDetail object in WireDimDetails Array object*/
                    WireDimDetails.push(WireDimDetail);
                })
                /*Add WireDimDetails array of object to user object*/
                user.WireDimDetails = WireDimDetails;
$.ajax({
                    type: "POST",
                    url: "TDC.aspx/SaveFrmDetails",
data: JSON.stringify({ user: user, }),
contentType: "application/json; charset=utf-8",
                    dataType: "json",
                    success: function (response) {
                        alert("Data has been added successfully.");
                        window.location.reload();
                    },
                    error: function (response) { alert(response.responseText); }
                });
</script>

服务器端

[WebMethod]    
public static void SaveFrmDetails(User user)
{
    string connectionString = ConfigurationManager.ConnectionStrings["conndbprodnew"].ConnectionString;

    using (OracleConnection con = new OracleConnection(connectionString))
    {
        using (OracleCommand cmd = new OracleCommand("INSERT INTO TDC_PRODUCT1(PRODUCT_ID,TDC_NO, REVISION) VALUES (:PRODUCT_ID,:TDC_NO,:REVISION )",con))
        { 
            cmd.CommandType = CommandType.Text;

            List<WireDimDetail> wireDimDetails = user.WireDimDetails;

            for (int i = 0; i < wireDimDetails.Count; i++)
            {
                WireDimDetail wireDimDetail = wireDimDetails[i];
                string sizeMin = wireDimDetail.SizeMin;
                string sizeMax = !string.IsNullOrEmpty(wireDimDetail.SizeMax) ? wireDimDetail.SizeMax : "0"; // set default value
                string tolMin = wireDimDetail.TolMin;
                string tolMax = wireDimDetail.TolMax;
            }

            cmd.Parameters.AddWithValue(":PRODUCT_ID",user.PRODUCT_ID);
            cmd.Parameters.AddWithValue(":TDC_NO", user.TDC_NO);
            cmd.Parameters.AddWithValue(":REVISION", user.REVISION);

            cmd.Connection = con;

            con.Open();
            cmd.ExecuteNonQuery();
            con.Close();
        }
    }
}

用于保存数据的表结构和数组的数组列表,tdcProduct1表由三列组成:

Productid | Tdc_no | Revision

第二张表Prop_detail

Tdc_no | Tdc_property

我关心的是如何使用Prop_detailtdcProduct1中存储数据的同时在SaveFrmDetails表格中存储数据数组。任何想法都将不胜感激。

1 个答案:

答案 0 :(得分:2)

我认为您希望为每个用户<{1}}保存多个<?php if(isset($_GET['message']) && $_GET['message'] =='success'){ echo "record inserted successfully"; }

所以一个简单的方法是遍历WireDimDetail并获取Prop_detail的字符串,以便插入wireDimDetails

wireDimDetail中插入行后,为了插入详细信息,代码就像:

Tdc_property

TDC_PRODUCT1是每个[WebMethod] public static void SaveFrmDetails(User user) { string connectionString = ConfigurationManager.ConnectionStrings["conndbprodnew"].ConnectionString; using (OracleConnection con = new OracleConnection(connectionString)) { using (OracleCommand cmd = new OracleCommand("INSERT INTO TDC_PRODUCT1(PRODUCT_ID,TDC_NO, REVISION) VALUES (:PRODUCT_ID,:TDC_NO,:REVISION )", con)) { cmd.CommandType = CommandType.Text; cmd.Parameters.AddWithValue(":PRODUCT_ID", user.PRODUCT_ID); cmd.Parameters.AddWithValue(":TDC_NO", user.TDC_NO); cmd.Parameters.AddWithValue(":REVISION", user.REVISION); cmd.Connection = con; con.Open(); cmd.ExecuteNonQuery(); cmd.CommandText = "insert into Prop_detail(Tdc_no,Tdc_property) values(@tdN,@tdProp)"; foreach (WireDimDetail wireDimDetail in user.WireDimDetails) { cmd.Parameters.Clear(); var stringwriter = new System.IO.StringWriter(); var serializer = new System.Xml.Serialization.XmlSerializer(wireDimDetail.GetType()); serializer.Serialize(stringwriter, wireDimDetail); cmd.Parameters.AddWithValue("@tdN", user.TDC_NO); cmd.Parameters.AddWithValue("@tdProp", stringwriter.ToString()); cmd.ExecuteNonQuery(); } con.Close(); } } } 的字符串。

但是如果您想要stringwriter的新记录,WireDimDetailsizeMinsizeMaxtolMin循环更改为:

tolMax

修改

最后的尝试将是:

foreach

备注:

可以从数据库中检索1- foreach (WireDimDetail wireDimDetail in user.WireDimDetails) { cmd.Parameters.Clear(); string[] strNumbers = new string[4] { wireDimDetail.SizeMin, !string.IsNullOrEmpty(wireDimDetail.SizeMax) ? wireDimDetail.SizeMax : "0", wireDimDetail.TolMin, wireDimDetail.TolMax }; foreach (string number in strNumbers) { cmd.Parameters.AddWithValue("@tdN", user.TDC_NO); cmd.Parameters.AddWithValue("@tdProp", number); cmd.ExecuteNonQuery(); } } 然后增加(可以由[WebMethod] public static void SaveFrmDetails(User user) { string connectionString = ConfigurationManager.ConnectionStrings["conndbprodnew"].ConnectionString; using (OracleConnection con = new OracleConnection(connectionString)) { using (OracleCommand cmd = new OracleCommand("INSERT INTO TDC_PRODUCT1(PRODUCT_ID,TDC_NO, REVISION) VALUES (:PRODUCT_ID,:TDC_NO,:REVISION )", con)) { cmd.CommandType = CommandType.Text; cmd.Parameters.AddWithValue(":PRODUCT_ID", user.PRODUCT_ID); cmd.Parameters.AddWithValue(":TDC_NO", user.TDC_NO); cmd.Parameters.AddWithValue(":REVISION", user.REVISION); cmd.Connection = con; con.Open(); cmd.ExecuteNonQuery(); cmd.CommandText = "insert into Prop_detail(Tdc_no,Rowno,Prop_Name,Tdc_property) values(@tdN,@rowNo,@propN,@tdProp)"; int rowNum = 1;// You can get rowNum from DB and initiate it to last rowNum foreach (WireDimDetail wireDimDetail in user.WireDimDetails) { cmd.Parameters.Clear(); Dictionary<string, string> strNumbers = new Dictionary<string, int>() { {"sizMin", wireDimDetail.SizeMin }, {"sizeMax" , !string.IsNullOrEmpty(wireDimDetail.SizeMax) ? wireDimDetail.SizeMax.ToString() : "0" }, {"tolMin", wireDimDetail.TolMin.ToString() }, {"tolMax", wireDimDetail.TolMax.ToString() } }; cmd.Parameters.Clear(); foreach (KeyValuePair<string, string> kvp in strNumbers) { cmd.Parameters.AddWithValue("@tdN", user.TDC_NO); cmd.Parameters.AddWithValue("@rowNo", rowNum); cmd.Parameters.AddWithValue("@propN", kvp.Key); cmd.Parameters.AddWithValue("@tdProp", kvp.Value); cmd.ExecuteNonQuery(); } rowNum++; } con.Close(); } } } 启动)。

2-我使用字典来保存变量的名称,例如rowNum等,有很多方法可以做到这一点