Использование ADO.NET как вставить список данных в SQL?

#c# #ado.net

#c# #ado.net

Вопрос:

У меня есть список данных, например list=[{id:1,name:"ABC",age:12},{id:2,name:"QWE",age:21}] , я хочу динамически вставлять эти данные в базу данных.

Я погуглил и нашел, как вставить определенные данные. но не знаю, как прочитать список, а затем вставить эти данные.

 string connetionString = null;
            SqlConnection connection;
            SqlCommand command;
            string sql = null;
            connetionString = "Data Source=source;Initial Catalog=testDB;User ID=ABCD;Password=password";
            sql = "INSERT INTO TableName (id,name,age) VALUES('1','ABC',12)";
            connection = new SqlConnection(connetionString);
            try
            {
                connection.Open();;
                command = new SqlCommand(sql, connection);
                command.ExecuteNonQuery();
               
                command.Dispose();
                connection.Close();
            }
            catch (Exception ex)
            {
                Console.WriteLine("Can not open connection ! ");
            }
 

Комментарии:

1. ну что ж … спрашиваю вас заранее … кодирование само по себе не проблема, не так ли?

2. Для вставки и чтения вы должны использовать разные коды. Например, вы считываете данные и, возможно, показываете их в griedview, и, возможно, после события щелчка вы можете вставить в таблицу некоторые значения. Вы написали, как вы можете вставить, если хотите, я могу написать вам, как вы можете читать?

3. Ваши данные, ИМХО, являются JSON, поэтому вы можете использовать библиотеку для разбора json для некоторого класса. Затем вы можете использовать подготовленный оператор для вставки каждой отдельной записи этого массива…

4.Проверьте этот блог. В нем есть ответы на ваши вопросы grauenwolf.github.io/DotNet-ORM-Cookbook/Joins.htm#ado.net grauenwolf.github.io/DotNet-ORM-Cookbook /…

5. Используйте объемную вставку. SqlBulkCopy

Ответ №1:

 cnx.Open(); // open cnx 
if(List.Count !=0){ // if List isn't empty 
    for(int i = 0 i < List.Count ;i  )
        {
            // here he will execute one by one 
            string myQuery ="insert into TABLE_NAME values ('" List[i][0] "','" List[i][1] "','" List[i][3] "' ");
            SqlCommand cmd = new SqlCommand(myQuery,cnx);
            cmd.ExecuteNonQuery();
        }
}
// i hope it's help you :))
 

Комментарии:

1. и вот как вы получаете атаку SQL-инъекции; извините, но это плохой ответ IMO — все, что способствует объединению входных данных для создания SQL, по своей сути крайне плохо

2. Итак, каков наилучший способ? :)) ?

3. параметризованный SQL, или если вы делаете много строк: SqlBulkCopy

4. ага, я вижу, спасибо