C# 使用类生成SQL insert语句

C# 使用类生成SQL insert语句,c#,sql,C#,Sql,我有一个关于使用c#类生成SQL insert语句的查询。 所以我有一个班叫学生 有一个函数可以获取学生列表并将其转储到数据库中 学生模型 public class Student { public string ID { get; set; } = ""; // DB column name is studentID public string Name { get; set; } = ""; // DB column name is studentName publi

我有一个关于使用c#类生成SQL insert语句的查询。 所以我有一个班叫学生

有一个函数可以获取学生列表并将其转储到数据库中

学生模型

public class Student
{
    public string ID { get; set; } = ""; // DB column name is studentID
    public string Name { get; set; } = ""; // DB column name is studentName
    public string address { get; set; } // DB column name is studentAddress
}
转储数据的功能

public async Task<Error> DumpStudentAsync()
{
    List<Student> students = new List<Student>();

    StringBuilder query = new StringBuilder();

    query = query.Append("INSERT INTO Student(studentID,studentName,studentAddress) VALUES");
    string columnList = "(@studentID{0},@studentName{0},@studentAddress{0})";

    for (int i = 0; i < students.Count; i++)
    {
        query.AppendFormat($"{columnList},", i);
    }
    query = query.Replace(',', ';', query.Length - 1, 1);

    SqlCommand cmd = new SqlCommand
    {
        CommandText = query.ToString(),
    };
    for (int i = 0; i < students.Count; i++)
    {
        cmd.Parameters.AddWithValue($"@studentID{i}", students[i].ID);
        cmd.Parameters.AddWithValue($"@studentName{i}", students[i].Name);
        cmd.Parameters.AddWithValue($"@studentAddress{i}", students[i].address);
    }

    SQLWrapper db = new SQLWrapper(_ctx, "", DSConfig.SQLConnectionKey);
    return await db.ExecuteStatementAsync(cmd, "");
}

仅供参考:我正在使用ADO.NET代码来执行DB活动,而不是实体框架。

这种自动操作不容易完成。NET是强类型的。除非你去做反射或者动态代码之类的事情。我不建议这样做。打字能力强是你的朋友。如果没有它,您将在的JavaScript和PHP示例中结束。提示:JS在这两种情况下都做了错误的事情

至少对我来说,必须在前端对数据库进行一些小的更改是可以接受的工作。如果说这是整个过程中最微小、最不危险的部分。所以我只能建议不要尝试这个


然而,对于数据库和仅数据库,像实体框架这样的东西可能是个好主意。它可以从数据库生成类。

我认为在这种情况下,最好更改代码。即使您正在使用EF,并且您的学生类将是实体,并且若有任何更改,您也应该更新模型。此外,使用字符串操作生成SQL通常是一种不好的做法。@Selim你能给我建议实现这一点的最佳方法吗?我的建议是不要做这种事情。离题评论:这是什么原因:1。创建单次插入查询,设置两个参数并在事务中循环执行?@Selvin我想立即批量插入数据。我不想为每个insert语句调用SQL,因此我编写了这段代码来批量插入数据。
StringBuilder studentQuery = new StringBuilder();
string columns = "";
// Add column list on the basis of students properties
foreach (var property in Student.Properties)
{
    columns += "property.ID,"; // It should be studentID
}

// Add variables on the basis of students count

// Add command parameters value on the basis of students count