簡體   English   中英

Visual Studio 未從 Microsoft SQL Server Management Studio 加載數據

[英]Visual studio not loading data from Microsoft SQL Server Management Studio

我嘗試從我在 SSMS 上創建的表中檢索數據。 我以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();
    }

在此處輸入圖片說明

這里有一大堆優化要做,但我想發布一個答案,介紹一個小而根本的變化,這將使您的生活變得更加輕松。 您在那里編寫的幾乎每一行代碼,都可以讓 Visual Studio 為您編寫; 就像你在布局表單時讓它編寫代碼一樣,你也可以讓它做所有這些數據訪問的事情,如果你已經設法連接 SSMS,那么連接 VS 幾乎是相同的過程,並且意味着它只是有效:

  • 將 DataSet 類型的文件添加到您的項目中,並打開它
  • 右鍵單擊它並選擇添加一個 TableAdapter - 這就像類固醇上的 DataAdapter
  • 添加新連接 - 該對話框幾乎與 SSMS 相同,因此您應該能夠輕松連接數據庫
  • 假設您要編寫“返回行的查詢” - 將SELECT * FROM movie放入
  • 完成向導
  • 右鍵單擊 tableadapter 中的“填充”行並選擇預覽數據,點擊按鈕並查看您的數據。 如果看不到數據,則連接到沒有數據的數據庫
  • 轉到您的表單,打開數據源窗口(查看菜單.. 其他窗口)
  • movie節點拖出“數據源”窗口並拖到窗體上
  • 運行應用程序

你會看到你的數據

現在您已經了解了這一點,您可以開始玩其他東西了。 扔掉DataTable dt 你不需要它。 您的表單上有一個dataset對象,其中包含一個 Movie 屬性,它是一個 MovieDataTable - 一個數據表的子類,您可以以比通過“字符串列名稱”更合乎邏輯和現代的方式訪問 - 例如,您在這里說的是yourdatasetnamehere.Movies[0].movie_title它已經是一個字符串(順便把你的列名換成 PascalCase)而不是somedatatable.Rows[0]["movie_title"].ToString()

要在列表框中顯示您的電影,

  • 向表單添加列表框
  • 將 DataSource 屬性設置為movieBindingSource
  • 將 DisplayMember 設置為movie_title

(所有這些都是在表單設計器上直觀地完成的,而不是在代碼中)

您也可以考慮將 Movie POCO 扔掉; 一個 MovieDataRow 由數據集生成器創建; 它以強類型方式擁有您電影的所有屬性,就像您的 POCO 一樣。 tableadapter 下載 DB 數據並將其轉換為強類型的 MovieDataRow 對象,這意味着您也可以丟棄 ShowMovies 中的所有 POCO 映射內容,最后,數據綁定您的列表框意味着您可以丟棄構建其項目集合的位手動。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM