2016-10-01 7 views
-1

データベースからデータを表示しようとしています。ただし、データベースにデータが存在しても、レコードは返されません。私が返されますC#データベースから返されたデータがありません - "データが存在しないときに読み込みが無効です"

select Id, Movie_Name from [MovieTable] where Movie_Name like '10,000 BC' 

::次のクエリを実行した場合

は、C#の何で同様のクエリを実行している場合しかし、

enter image description here

を返されているように見えます。私のコードは次の通りです:

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()のすぐ上に3番目のメッセージボックスを追加すると、 "データが存在しないときに読み込みが無効です"というメッセージが表示されます。私は行方不明のものがありますか?

+0

このメッセージは、データを読み込む前にデータウェアハウスからデータを要求することができません。 MessageBoxはコードをデバッグする恐ろしい方法です – Plutonix

+0

これはWindowsフォームアプリケーションです。年の値を変数に代入してそこにブレークポイントを指定すると、何が表示されますか? –

+0

whileループに入っていないようなものは何もありません – difurious

答えて

0

データ自体に問題があります。フィールドがタイプ "テキスト"として間違って設定されました。フィールドのデータ型を「nvarchar(MAX)」に変更しました。また、クエリを変更することができます:

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

あなたのコードはうまく動作します。

oReader.GetOrdinal("Year") 

サンプルで例外が発生します。 あなたは、テーブル内とあなたの最初のクエリでは存在しない属性「年」の値を照会します。

パラメータ化されたクエリを使用しているため、一重引用符は必要ありません。 System.Diagnostics.Debug.WriteLine()への呼び出しをデバッグする場合は、MessageBoxesよりも便利です。

関連する問題