使用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"]);
按列名称来完成。