【发布时间】:2021-03-06 13:27:19
【问题描述】:
我正在尝试从我在 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();
}
【问题讨论】:
-
您可以将整个 LoadData 方法简化为
new SqlDataAdapter("SELECT * FROM movie", @"Data Source=.\SQLEXPRESS;Initial Catalog=online_tv;Integrated Security=SSPI;").Fill(dt)。在这之后 dt 有多少行? -
顺便说一句,请决定表名复数策略并坚持下去。.movie 是单数,users 是复数。也几乎不需要在电影的每一列前面加上“电影”——这是(应该是)表别名的用途
-
是的,好的,知道了,但这并没有解决问题
-
评论不是答案/“解决问题”,它们是为了要求澄清。我注意到您没有回答我在第一条评论中提出的问题
-
我不明白你的第一个问题,行从哪里来?
标签: c# mysql visual-studio ssms