我对使用数据集、适配器、数据表等有点陌生...所以我认为这可以算是一个菜鸟问题。
我使用可视化设计器(扩展名为 .xsd 的文件)在 visual studio 中创建数据集。我在那里定义了一个名为“类(class)”的数据表。我使用 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();
我没有收到任何错误,它会正常运行代码,但由于“query”变量中没有任何内容,它不会生成我想要的新对象并映射值。
我在这里错过了什么?
编辑
感谢您的快速回复!当我添加代码行时:
da.Fill(ds);
它给了我这个异常(exception):
{"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
我没看到你在任何地方调用适配器上的填充?
那里的某处应该有一行代码,看起来像...
SqlDataAdapter da = new SqlDataAdapter("select * from courses", mySqlConnection);
da.Fill(ds);
此外,您需要将数据适配器的select命令设置为您打算从数据库运行的sql语句。
我是一名优秀的程序员,十分优秀!