Click here to Skip to main content
15,923,015 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
My purpose id to create a query from list where list contains column name and data.

Below is my list. List heading name is [Data,DataColumnType]
["ABC","StringColumn1"]
["XYZ","StringColumn2"]
["12/07/2017","DataColumn1"]
["INR","StringColumn3"]
["1000","FloatColumn1"]

I need to build up a query from list as below
string sqlquery = "INSERT INTO tablename (StringColumn1,StringColumn2,DataColumn1,StringColumn3,FloatColumn1) VALUES ('ABC','XYZ','12/07/2017','INR',1000)

Here the count of list may vary and it may not be static. so i cannot able to assign values from list and do statically.

Thanks in Advance.

What I have tried:

C#
List<dataitems> lst = new List<dataitems>();
            DataItems dt = new DataItems();
            dt.Data = "ABC";dt.DataColumn = "StringColumn1";
            dt.Data = "XYZ"; dt.DataColumn = "StringColumn2";
            dt.Data = "12/01/2017"; dt.DataColumn = "DateColumn1";
            lst.Add(dt);

            string query = "INSERT INTO tableName";
            int i = 0;
            foreach(var l in lst)
            {
                // 
            }
Posted
Updated 13-Feb-17 2:42am
v2

you need to use a parameterized insert statement - read this Give me parameterized SQL, or give me death[^]

C#
SqlCommand command1 = new SqlCommand("INSERT INTO tablename VALUES(@StringColumn1, ...)", SQLConnection);

command1.Parameters.AddWithValue("@StringColumn1", "ABC");
...
command1.ExecuteNonQuery();


Every time you insert a row of data iirc you do a command1.Reset() to reset the variables but please look it up, its been a while
 
Share this answer
 
v2
List<DataItems> lst = new List<DataItems>();
           lst.Add(new DataItems() { Data = "ABC", DataColumn = "StringColumn1" });
           lst.Add(new DataItems() { Data = "XYZ", DataColumn = "StringColumn2" });
           lst.Add(new DataItems() { Data = "12/07/2017", DataColumn = "DateColumn1" });
           lst.Add(new DataItems() { Data = "INR", DataColumn = "StringColumn3" });
           lst.Add(new DataItems() { Data = "1000", DataColumn = "FloatColumn1" });

           string query = "INSERT INTO tableName ({0}) values ({1})";
           List< string> columnNames= new List<string>();
           List< string> columnValues= new List<string>();

           SqlCommand cmd = new SqlCommand();
           foreach (var item in lst)
           {
               cmd.Parameters.Add("@" + item.DataColumn, item.Data);
               columnValues.Add("@" + item.DataColumn);
               columnNames.Add(item.DataColumn);
           }
           string cols = string.Join(",", columnNames);
           string datas = string.Join(",", columnValues);
           query = string.Format(query, cols, datas);
 
Share this answer
 
v2
Here is a runnable solution for you to sample and try out.
It's broken up this way to make it easier to test, and re-use handy string and list functions.

namespace ConsoleApp01
{
    using System;
    using System.Collections.Generic;
    using System.Data.SqlClient;
    using System.Linq;

    public class Program
    {
        public static void Main()
        {
            List<DataItems> dataList1 = DataQuery1();
            string insertSQL = dataList1.GetInsertSQL("Table1");
            SqlCommand cmd = new SqlCommand();
            cmd.Parameters.AddRange(dataList1.SQLParameters());

            Console.WriteLine(insertSQL);
            foreach (SqlParameter sqlP in cmd.Parameters)
            {
                string
                    paramName = sqlP.ParameterName,
                    paramValue = Convert.ToString(sqlP.Value);
                Console.WriteLine(paramName + ": " + paramValue);
            }
        }

        public static List<DataItems> DataQuery1()
        {
            return new List<DataItems>
            {
                new DataItems { Data = "ABC", DataColumn = "StringColumn1" },
                new DataItems { Data = "XYZ", DataColumn = "StringColumn2" },
                new DataItems { Data = "12/01/2017", DataColumn = "DateColumn1" }
            };
        }
    }

    public class DataItems
    {
        public string Data { get; set; }
        public string DataColumn { get; set; }
    }

    public static class DataItemsExtensions
    {
        public static SqlParameter[] SQLParameters(this List<DataItems> items)
        {
            return items.Select(x => new SqlParameter("@" + x.DataColumn, x.Data)).ToArray();
        }

        public static List<string> ColumnNames(this List<DataItems> items)
        {
            return items.Select(x => x.DataColumn).ToList();
        }

        public static List<string> ParameterNames(this SqlParameter[] items)
        {
            return items.Select(x => x.ParameterName).ToList();
        }

        public static string GetInsertSQL(this List<DataItems> items, string tableName)
        {
            string query = "INSERT INTO {0} ({1}) VALUES({2})";
            string columns = string.Join(",", items.ColumnNames());
            string values = string.Join(",", items.SQLParameters().ParameterNames());
            return string.Format(query, tableName, columns, values);
        }
    }
}
 
Share this answer
 

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900