使用SqlDataReader.IsDBNull时使用列名

您好我有这个从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"); 

提前致谢。

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

我会尝试(string)(reader["ColumnName"] == DBNull.Value ? "" : reader["ColumnName"]); 按列名称来完成。