小编典典

使用SqlDataReader.IsDBNull时使用列名

sql

您好,我有这段代码可以从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");

提前致谢。


阅读 166

收藏
2021-04-22

共1个答案

小编典典

您正在寻找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())
     {
       ......
     }
  }
2021-04-22