我对使用数据集、适配器、数据表等有点陌生......所以我相信这将成为一个菜鸟问题。
我使用视觉设计器(扩展名为 .xsd 的文件)在视觉工作室中创建数据集。我在那里定义了一个名为“课程”的数据表。我通过设计器使用 sql server 查询填充了这个表,所以我知道我的数据连接正确。
在我的代码中,我正在测试如何使该 DataTable 实例化,然后将其中的列映射到我称为 Course.cs 的本地类。这是方法:
MyContext ctx = new MyContext();
SqlConnection conn =
new SqlConnection("Data Source=****;Initial Catalog=****;User ID=****;Password=****");
SqlCommand command = new SqlCommand(@"select * from stuff", conn);
SqlDataAdapter da = new SqlDataAdapter();
MyDataSet ds = new MyDataSet();
ds.Locale = CultureInfo.InvariantCulture;
da.Fill(ds);
DataTable courses = ds.Courses;
IEnumerable<DataRow> query =
from course in courses.AsEnumerable()
select course;
foreach (var course in query)
{
Course localCourse = new Course();
localCourse.CourseCode = course.Field<string>("CourseCode");
ctx.Courses.Add(localCourse);
}
ctx.SaveChanges();
我没有收到任何错误,它可以正常运行代码,但是由于“查询”变量中没有任何内容,因此它不会生成我想要的新对象并映射值。
我在这里想念什么?
编辑
感谢您的快速回复!当我添加代码行时:
da.Fill(ds);
它给了我这个例外:
{"The SelectCommand property has not been initialized before calling 'Fill'."}
这让我感到困惑,因为我不想创建一个选择命令,虽然我已经在我的数据表中了?
编辑二
我已经完成了建议的操作,我需要做的事情是有道理的,但我仍然没有得到任何结果(虽然没有错误了..)。如果我在相同的连接字符串上运行相同的查询,我可以获得结果,有什么想法吗?
编辑三!
这是我用来填充数据表的原始且丑陋的查询。就像我说的,如果我在 SSMS 中进行,结果会很好。
select
s.AdClassSchedId,
rtrim(s.code) +
CASE WHEN (isnull(s.section,'') <> '')
THEN '-S' + s.section
ELSE '' END as CourseCode,
s.descrip +
CASE WHEN (isnull(s.section,'') <> '')
THEN ' - Section ' + s.section
ELSE '' END as CourseName,
s.AdTeacherId,
s.StartDate,
s.EndDate,
s.DateLstMod as ClassSchedLastModified,
t.AdTermId
from adclasssched s
inner join adclassschedterm t on s.adclassschedid = t.adclassschedid
where s.active = 1