C# C“没有从数据库返回数据-”;当不存在数据时读取的尝试无效”;

C# C“没有从数据库返回数据-”;当不存在数据时读取的尝试无效”;,c#,sql,C#,Sql,我正在尝试显示数据库中的数据。但是,即使数据库中存在数据,也不会返回任何记录 如果需要,请运行以下查询: select Id, Movie_Name from [MovieTable] where Movie_Name like '10,000 BC' 我被送回: 然而,在c#中运行类似的查询时,似乎没有返回任何内容。我的代码如下: try { string query = "select * from [MovieTable] where Movie_Name like @Movi

我正在尝试显示数据库中的数据。但是,即使数据库中存在数据,也不会返回任何记录

如果需要,请运行以下查询:

select Id, Movie_Name from [MovieTable] where Movie_Name like '10,000 BC'
我被送回:

然而,在c#中运行类似的查询时,似乎没有返回任何内容。我的代码如下:

try
{
    string query = "select * from [MovieTable] where Movie_Name like @MovieName";
    string movieName = "10,000 BC"

    using (SqlConnection sconnection = new SqlConnection(@"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=E:\Application\ApplicationDatabase.mdf;Integrated Security=True");)
    using (SqlCommand command = new SqlCommand(query, sconnection))
    {
        sconnection.Open();
        command.Parameters.AddWithValue("@MovieName", movieName);

        using (SqlDataReader oReader = command.ExecuteReader())
        {
            if (oReader != null)
            {
                while (oReader.Read())
                {
                    MessageBox.Show(oReader["Movie_Name"].ToString());
                }
            }
        }
    }
}
catch (Exception e)
{
    MessageBox.Show(e.ToString());
}

消息框从未出现。在oReader.Read()的正上方添加第三个消息框将显示消息“在没有数据时尝试读取无效”。有什么我遗漏的吗?

您的代码对我来说运行良好,但几乎没有修改。 查询表和第一次查询中不存在的属性“Year”的值:

oReader.GetOrdinal("Year")
这会导致样本中出现异常

不需要单引号,因为您使用的是参数化查询。
对于调试对System.Diagnostics.Debug.WriteLine()的调用,它比MessageBox更有用

问题在于数据本身。字段被错误地设置为“文本”类型。我将字段数据类型更改为“nvarchar(MAX)”。这也意味着查询不能更改为:

"select * from [MovieTable] where Movie_Name = @MovieName"

这条消息是因为在数据阅读器读取数据之前,您不能向它请求数据。MessageBox是调试代码的可怕方式这是一个windows窗体应用程序,对吗?如果你得到一个变量的年份值,并在那里指向一个断点,它会显示什么?什么都没有,因为它似乎没有进入while循环,我不得不问,如果你要像equals一样使用它,在SQL语句中使用
like
有什么意义?