C# 如何在变量中使用sql查询结果?

C# 如何在变量中使用sql查询结果?,c#,sql-server,C#,Sql Server,我想在变量中同时使用我的sql查询结果。我该怎么做 var conn = new SqlConnection(@"Server=(localdb)\MSSQLLocalDB; AttachDbFileName=|DataDirectory|database.mdf;"); conn.Open(); var comm = new SqlCommand($"SELECT name FROM database WHERE age = 25", conn); var reader = comm.Exec

我想在变量中同时使用我的sql查询结果。我该怎么做

var conn = new SqlConnection(@"Server=(localdb)\MSSQLLocalDB; AttachDbFileName=|DataDirectory|database.mdf;");
conn.Open();
var comm = new SqlCommand($"SELECT name FROM database WHERE age = 25", conn);
var reader = comm.ExecuteReader();
 while(reader.Read())
{
  string name =reader[0].ToString();

}
conn.Close();


if (name != textbox.Text)
{
 //do something
}

使用
数据表
,您可以轻松访问行数据。比如:

DataTable dt = new DataTable();
dt.Load(reader)
然后可以使用
DataTable.Rows
属性

DataRow row = dt.Rows[0];
string name = row["name"].ToString();

您可以改用DataAdapter:

var table = new DataTable(); 

using(SqlConnection con = new SqlConnection(@"Server=(localdb)\MSSQLLocalDB; AttachDbFileName=|DataDirectory|database.mdf;"))
using(SqlCommand command =  new SqlCommand($"SELECT name FROM database WHERE age = 25", con))
using(SqlDataAdapter adapter = new SqlDataAdapter(command))
{
    con.Open();
    adapter.Fill(table);
}


// if single row 
if (table.Rows[0].Field<string>("name") != textbox.Text)
{
 //do something
}

//if multiple rows 
for(int x = 0; x < table.Rows.Count; x++)
{
    if (table.Rows[x].Field<string>("name") !=  textbox.Text)
    {
     //do something
    }
}
var table=newdatatable();
使用(SqlConnection con=newsqlconnection(@“Server=(localdb)\MSSQLLocalDB;AttachDbFileName=| DataDirectory | database.mdf;”)
使用(SqlCommand=newsqlcommand($“从年龄=25的数据库中选择名称”,con))
使用(SqlDataAdapter=newsqldataadapter(命令))
{
con.Open();
适配器。填充(表格);
}
//如果是单行
if(table.Rows[0]。字段(“name”)!=textbox.Text)
{
//做点什么
}
//如果有多行
对于(int x=0;x
这不是一个单一的结果。除非某些东西真的很奇怪,否则你的数据库中应该有不止一个25岁的人。因此,您需要将查询结果映射到数组或列表。如果你真的只期望一个单一的值(这个值应该只发生在标量函数中,或者你使用像主键/其他唯一键这样的东西),那么ExecuteScalar就是一个不错的选择。如果您计划允许用户选择值,那么您确实希望使用参数化查询。在这部漫画中,做屏幕外的角色毫无意义:2.你想以更可靠的方式关闭连接。使用块是最可靠的方法。3.通常不在数据库中存储“已处理的数据”。您存储生日并计算年龄。当然,出于实际原因,您可能仍然会以某种方式缓存结果,只要您确实确定没有保留旧值。无需在DataAdapter.Fill()之前打开连接。DataAdapter将为您打开和关闭连接;但是,如果它发现它是打开的,它会让它保持打开状态。这里没有问题,因为您使用的是块。