16

こんにちは、SQL DB からデータを読み取るこのコードを取得しました。

列インデックスではなく元の列名を使用できるように、どのように編集すればよいかわかりません。

string query = "SELECT * FROM zajezd WHERE event='" + thisrow+ "' AND year='" + klientClass.Year() + "'";
SqlCommand cmd= new SqlCommand(query, spojeni);
spojeni.Open();
SqlDataReader read= cmd.ExecuteReader();


if (read.Read())
{
    maskedTextBox2.Text = read.IsDBNull(24) ? 
        string.Empty : 
        read.GetDateTime(24).ToString("MM/dd/yyyy");

前もって感謝します。

4

4 に答える 4

23

SqlDataReader.GetOrdinalを探しています

MSDNによると

列の名前を指定して、列の序数を取得します。

if (read.Read())
{
   int colIndex = read.GetOrdinal("MyColumnName");
   maskedTextBox2.Text = read.IsDBNull(colIndex) ? 
                  string.Empty : 
                  read.GetDateTime(colIndex).ToString("MM/dd/yyyy");

}

補足として、クエリはSQLインジェクションに対して開かれています。文字列の連結を使用して SQL コマンドを作成するのではなく、パラメーター化されたクエリを使用します。

  string query = "SELECT * FROM zajezd WHERE event=@p1 AND year=@p2";
  using(SqlCommand cmd= new SqlCommand(query, spojeni))
  {
     spojeni.Open();
     cmd.Parameters.AddWithValue("@p1",thisrow);
     cmd.Parameters.AddWithValue("@p2",klientClass.Year().ToString());
     using(SqlDataReader read= cmd.ExecuteReader())
     {
       ......
     }
  }
于 2013-09-27T19:42:30.530 に答える
9

私は(string)(reader["ColumnName"] == DBNull.Value ? "" : reader["ColumnName"]);列名でそれをやろうとします。

于 2013-09-27T19:42:43.763 に答える