我试图在数据库中保存数据如何实现它。
我有一个表单,其中有三个输入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_detail
在tdcProduct1
中存储数据的同时在SaveFrmDetails
表格中存储数据数组。任何想法都将不胜感激。
答案 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
的新记录,WireDimDetail
,sizeMin
和sizeMax
将tolMin
循环更改为:
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
等,有很多方法可以做到这一点