C# 反序列化JSON,然后插入到表中

C# 反序列化JSON,然后插入到表中,c#,asp.net,json,serialization,deserialization,C#,Asp.net,Json,Serialization,Deserialization,我想将JSON字符串插入到表中,我将JSON字符串反序列化到对象列表中,然后插入到表中,但不起作用 我的代码: 我的JSON数据 {"data":[{"ID":"1","Personnel_Number":"1001","Employee_Name":"Employee 1","Password":"12345","Gender":"M","Grade":"W5","Designation":"4","SBU_ID":"1","Department":"1","Category":"1","Em

我想将JSON字符串插入到表中,我将JSON字符串反序列化到对象列表中,然后插入到表中,但不起作用 我的代码:

我的JSON数据

{"data":[{"ID":"1","Personnel_Number":"1001","Employee_Name":"Employee 1","Password":"12345","Gender":"M","Grade":"W5","Designation":"4","SBU_ID":"1","Department":"1","Category":"1","Email_ID_Official":"","Email_ID_Personal":"","Mobile_Number":"","Current_Address":"","Permanent_Address":"","Aadhaar_No":"","DOB":"","DOJ":"","DOM":"","Marital_Status":"","Profile_Pic_Path":"http://iprofileapi.dev.app6.in/UploadedFiles/6365794593150041732018329.jpg","Remarks":"","Status":"Active","Created_By":"dbo","Created_On":"20-09-2017 19:35:13","Updated_By":"3872","Updated_Date":"09-01-2019 12:48:00"},{"ID":"2","Personnel_Number":"1002","Employee_Name":"Employee 2","Password":"12345","Gender":"M","Grade":"W5","Designation":"153","SBU_ID":"6","Department":"28","Category":"1","Email_ID_Official":"","Email_ID_Personal":"","Mobile_Number":"","Current_Address":"","Permanent_Address":"","Aadhaar_No":"","DOB":"","DOJ":"","DOM":"","Marital_Status":"","Profile_Pic_Path":"","Remarks":"","Status":"Active","Created_By":"dbo","Created_On":"20-09-2017 19:35:13","Updated_By":"4957","Updated_Date":"10-02-2018 19:06:58"},{"ID":"3","Personnel_Number":"1003","Employee_Name":"Employee 3","Password":"12345","Gender":"M","Grade":"W5","Designation":"41","SBU_ID":"1","Department":"3","Category":"1","Email_ID_Official":"","Email_ID_Personal":"","Mobile_Number":"","Current_Address":"","Permanent_Address":"","Aadhaar_No":"","DOB":"","DOJ":"","DOM":"","Marital_Status":"","Profile_Pic_Path":"","Remarks":"","Status":"Active","Created_By":"dbo","Created_On":"20-09-2017 19:35:13","Updated_By":"5482","Updated_Date":"05-10-2017 15:36:16"},{"ID":"4","Personnel_Number":"1004","Employee_Name":"Employee 4","Password":"12345","Gender":"M","Grade":"W2","Designation":"120","SBU_ID":"26","Department":"88","Category":"1","Email_ID_Official":"","Email_ID_Personal":"","Mobile_Number":"","Current_Address":"","Permanent_Address":"","Aadhaar_No":"","DOB":"","DOJ":"","DOM":"","Marital_Status":"","Profile_Pic_Path":"","Remarks":"","Status":"Active","Created_By":"dbo","Created_On":"20-09-2017 19:35:13","Updated_By":"6298","Updated_Date":"06-10-2017 13:30:20"},{"ID":"5","Personnel_Number":"1005","Employee_Name":"Employee
等等

首先,我在相同的基础上对所有项目进行分类。我不会发布所有数据,因为它太长了。这是一个示例数据:

    public class tblEmployee
            {
                public string ID { get; set; }
                public string Personnel_Number { get; set; }
                public string Employee_Name { get; set; }
                public string Password { get; set; }
            }
然后,我为项目列表创建另一个类:

 public class SalesTransactions
        {
            public List<tblEmployee> transactions { get; set; }
            public int count { get; set; }
        }
公共类SalesTransactions
{
公共列表事务{get;set;}
公共整数计数{get;set;}
}
然后,我在单击按钮时创建了将数据插入sql server表的命令

protected void btninsertjsondata_Click(object sender, EventArgs e)
        {
            var conString = ConfigurationManager.ConnectionStrings["SQLDBConnection1"];
            string strConnString = conString.ConnectionString;
            SqlConnection conn = new SqlConnection(strConnString);
            SqlCommand com;
            string data = HttpContent("https://localhost:45333/Retrive_Jsondata.aspx");
            JavaScriptSerializer jsSerializer = new JavaScriptSerializer();
            SalesTransactions table = JsonConvert.DeserializeObject<SalesTransactions>(data);
            conn.Open();
            com = new SqlCommand("INSERT INTO dbo.tbl_Iprofile_Employee select * from " + table, conn);
            com.CommandType = CommandType.Text;
            int refId = com.ExecuteNonQuery();
            conn.Close();
            if (refId > 0)
            {
                Response.Write("{\"response\":{\"status\":\"success\",\"msg\":\"Details Saved Successfully..\"}}");
            }
            else
            {
                Response.Write("{\"response\":{\"status\":\"fail\",\"msg\":\"oops!! something went wrong\"}}");
            }
        }
protectedvoid btnisertjsondata\u单击(对象发送方,事件参数e)
{
var conString=ConfigurationManager.connectionString[“SQLDBConnection1”];
字符串strConnString=consting.ConnectionString;
SqlConnection conn=新的SqlConnection(strConnString);
SqlCommand-com;
字符串数据=HttpContent(“https://localhost:45333/Retrive_Jsondata.aspx");
JavaScriptSerializer jsSerializer=新的JavaScriptSerializer();
SalesTransactions表=JsonConvert.DeserializeObject(数据);
conn.Open();
com=新的SqlCommand(“插入dbo.tbl_Iprofile_Employee select*from”+表格,conn);
com.CommandType=CommandType.Text;
int refId=com.ExecuteNonQuery();
康涅狄格州关闭();
如果(refId>0)
{
Response.Write(“{\'Response\':{\'status\':\'success\',\'msg\':\'Details Saved Successfully..\'}”);
}
其他的
{
写(“{\'Response\':{\'status\':\'fail\',\'msg\':\'oops!!出了点问题\'}”);
}
}
表中调试代码时,我得到了计数0事务null,这就是为什么我的sql查询不起作用,并且在数据中得到了“+”附近的不正确语法。我得到了所有JSON字符串,但无法转换为表格式 如果我做错了,请帮助我是否应该添加for循环以映射所有列和行???

编辑:

在调试器中检查查询的实时性。您正在向select语句中添加一个不带表名的字符串的对象

foreach (var row in table.transactions)
{
      com = new SqlCommand(
      string.Format("INSERT INTO dbo.tbl_Iprofile_Employee (ID ,Personnel_Number,Employee_Name,Password )
                     VALUES ({0},{1},{2},{3});",
            row.ID, row.Personnel_Number, row.Employee_Name, row.Password),
            conn);
        com.CommandType = CommandType.Text;
        int refId = com.ExecuteNonQuery();
}
两个代码示例(您的和我的)都有漏洞

为了更好的可读性和可持续性,请首先尝试在独立的类和方法中提取DB逻辑。这样做的一个常见方法是

对于它的实现,请尝试使用类似的微型ORM


整个方法将帮助您完成所有这些耗时的事情,如调试、测试和维护应用程序。

json数据中有什么?这应该如何工作<代码>插入到dbo.tbl_Iprofile_Employee select*from“+table
。想想那一行发生了什么…@gayan1991请检查我编辑的Question@VDWWDINSERT INTO dbo.tbl_Iprofile_Employee select*from“+表它将把我的数据插入到SQL表中,这些数据来自于表try this
Label1.Text=table.ToString()
的值将是多少,作为一个字符串。这也在这方面发生<代码>表
不是数据库对象。稍后,我将把行查询更改为存储过程,但我无法插入数据,因此仅为了检查其是否工作,我使用query@NitsPatel如果你在MySql中有150个存储过程,然后你想更改数据库,那将是一片混乱。好吧,我明白你想说什么,我不粗鲁,但这不是我要解释的关于sql注入的问题??我应用了您的代码,但在显示错误行的行上,我应该将行声明为字符串变量吗?