C# 使用类生成SQL insert语句
我有一个关于使用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
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