Visual studio 未从 Microsoft SQL Server Management Studio 加载数据

Visual studio not loading data from Microsoft SQL Server Management Studio

我正在尝试从我在 SSMS 上创建的 table 中检索数据。我以 visual studio 的形式创建了一个列表框,并尝试显示来自数据库的数据,但是当我尝试加载程序时它没有发送任何内容。数据库看起来不错。当我尝试检索 movie_id 和 movie_title 时出现该问题。 这是我的代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace DataBase
{
public partial class Form1 : Form
{
    DataTable dt = new DataTable();
    public void LoadData()
    {
        SqlConnection conn = new SqlConnection(@"Data Source=.\SQLEXPRESS;"+
            "Initial Catalog=online_tv;Integrated Security=SSPI;");
        SqlCommand cmd = new SqlCommand("SELECT movie.* FROM movie", conn);
        SqlDataAdapter sa = new SqlDataAdapter(cmd);
        conn.Open();
        sa.Fill(dt);
        conn.Close();
        sa.Dispose();
        cmd.Dispose();
        conn.Dispose();
    }

    public class MyMovie
    {
        public int id;
        public string title;
        public override string ToString()
        {
            return title;
        }
    }

    public void ShowMovies()
    {
        int i;
        for (i = 0; i < dt.Rows.Count; i++)
        {
            MyMovie movie = new MyMovie();
            movie.id = Convert.ToInt32(dt.Rows[i]["movie_id"]);
            movie.title = Convert.ToString(dt.Rows[i]["movie_title"]);

            listBox1.Items.Add(movie);
        }
    }

    public Form1()
    {
        InitializeComponent();
    }

    public void Form1_Load(object sender, EventArgs e)
    {
        LoadData();
        ShowMovies();
    }

这里有大量的优化要进行,但我想 post 一个答案,它引入了一个小的但根本性的变化,这将使您的生活变得更加轻松。几乎你在那里写的每一行代码,你都可以获得 Visual Studio 为你编写;就像你在布局表单时让它编写代码一样,你也可以让它完成所有这些数据访问工作,如果你已经设法连接 SSMS,那么连接 VS 实际上是相同的过程,并且将表示它正常工作:

  • 将 DataSet 类型的文件添加到您的项目中,然后打开它
  • 右键单击它并选择添加一个 TableAdapter - 这就像类固醇的 DataAdapter
  • 添加新连接 - 该对话框实际上与 SSMS 相同,因此您应该能够轻松连接您的数据库
  • 假设您要编写“returns 行的查询”- 将 SELECT * FROM movie 放入
  • 完成向导
  • 右键单击表格适配器中的“填充”行并选择“预览数据”,点击按钮并查看您的数据。如果您看不到任何数据,则您连接到一个没有数据的数据库
  • 转到您的表单,打开数据源 window(查看菜单.. 其他 Windows)
  • movie 节点从数据源 window 拖到表单上
  • 运行 应用

您会看到您的数据

现在您已经初步了解了这一点,您可以开始尝试其他内容了。把 DataTable dt 扔掉;你不会需要它。您的表单上有一个 dataset 对象,其中包含一个 Movie 属性,它是一个 MovieDataTable - 数据表的一个子类,您可以通过比“字符串列名称”更符合逻辑和现代的方式访问它 -例如,你说 yourdatasetnamehere.Movies[0].movie_title 并且它已经是一个字符串(顺便将你的列名换成 PascalCase)而不是 somedatatable.Rows[0]["movie_title"].ToString()

要在列表框中显示您的电影,

  • 向表单添加列表框
  • 将数据源 属性 设置为 movieBindingSource
  • 将 DisplayMember 设置为 movie_title

(所有这些都是在表单设计器上以可视方式完成的,而不是在代码中)

电影POCO你也可以考虑扔掉; MovieDataRow 由数据集生成器创建;它以强类型的方式拥​​有你电影的所有属性,就像你的 POCO 一样。 tableadapter 下载 DB 数据并将其转换为强类型 MovieDataRow 对象,这意味着您也可以丢弃 ShowMovies 中的所有 POCO 映射内容,最后,数据绑定您的列表框意味着您可以丢弃构建其项目集合的位手动。