web-dev-qa-db-ja.com

C#でのSQLデータベースからの値の読み取り

c#の学習を始めたばかりで、問題なくデータベースにデータを書き込むことができます。しかし、読み取りに問題があり、SQLは正常に実行されますが、保存に問題があります。返されるべき4つの列をどのように保存し、メッセージボックスとして表示するのですか?ありがとう。

SqlCommand myCommand = new SqlCommand("select * from Requests where Complete = 0", myConnection);
SqlDataReader myReader = myCommand.ExecuteReader();
while (myReader.Read())

Console.WriteLine(myReader["Username"].ToString());
Console.WriteLine(myReader["Item"].ToString());
Console.WriteLine(myReader["Amount"].ToString());
Console.WriteLine(myReader["Complete"].ToString());
24
Paul

1つの問題は、しばらくするとブレースが欠落することです

while (myReader.Read())
{  // <<- here
    Console.WriteLine(myReader["Username"].ToString());
    Console.WriteLine(myReader["Item"].ToString());
    Console.WriteLine(myReader["Amount"].ToString());
    Console.WriteLine(myReader["Complete"].ToString());
}  // <<- here

中括弧をスキップすると、各ループで最初の行のみが処理され、残りはループ後に処理され、myReaderは最後の行を過ぎます。

29
Albin Sunnanbo

using(){}ブロックを使用することを忘れないでください:

using (SqlConnection connection = new SqlConnection(connectionString))
using (SqlCommand command = new SqlCommand("select * from Requests where Complete = 0", connection))
{
    connection.Open();  
    using (SqlDataReader reader = command.ExecuteReader())
    {
        while (reader.Read())
        {
            Console.WriteLine(reader["Username"].ToString());
            Console.WriteLine(reader["Item"].ToString());
            Console.WriteLine(reader["Amount"].ToString());
            Console.WriteLine(reader["Complete"].ToString());
        }
    }
}
21
abatishchev

個人的には、4つのプロパティ(名前と型が一致する)を持つクラスを作成し、「dapper」(http://code.google.com/p/dapper-dot-net/)を使用します。

var data = connection.Query<Request>(
    "select * from Requests where Complete = 0").ToList();

次のようなもので:

public class Request {
    public string Username{get;set;}
    ...
    public bool Complete {get;set;}
}

Dapperは無料でシンプルで、SQLインジェクションを避けるためのパラメーター化があり、非常に高速です。

6
Marc Gravell

これらの値を保持するプロパティを持つオブジェクトを作成し、必要に応じてそのオブジェクトを渡します。

public class YourObjectName
{
   public string Username { get; set; }
   public string Item { get; set; }
   public string Amount { get; set; }
   public string Complete { get; set; }
}

YourObjectName a = new YourObjectName();
a.Username = Reader['Username'].ToString();
0
Dietpixel

私は少し遅いことを知っていますが、ローカル文字列変数、または文字列配列またはリストを使用してデータベースにデータを挿入し、コンソールの書き込み行で呼び出すことができます

0
Albert Laure