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 映射内容,最后,数据绑定您的列表框意味着您可以丢弃构建其项目集合的位手动。
我正在尝试从我在 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 映射内容,最后,数据绑定您的列表框意味着您可以丢弃构建其项目集合的位手动。