C# 使用SqlDataReader从数据库读取数据

C# 使用SqlDataReader从数据库读取数据,c#,sql-server-2008,ado.net,C#,Sql Server 2008,Ado.net,G_ID是Groups表中的整数列。我想要它的最大值。当我跟踪下面的代码时,我收到了我在代码中提到的错误。调试期间Reader.HasRows等于true。那么为什么它说“没有数据” 在访问DataReader之前,您需要调用Read方法将读取器定位到第一条记录上 SqlConnection sqlc= new SqlConnection("data source=. ; database=LDatabase; integrated security=true"); SqlCommand cmd

G_ID是Groups表中的整数列。我想要它的最大值。当我跟踪下面的代码时,我收到了我在代码中提到的错误。调试期间Reader.HasRows等于true。那么为什么它说“没有数据”


在访问DataReader之前,您需要调用Read方法将读取器定位到第一条记录上

SqlConnection sqlc= new SqlConnection("data source=. ; database=LDatabase; integrated security=true");
SqlCommand cmd= new SqlCommand("select MAX(G_ID) as MAXID from Groups", sqlc);

sqlc.Open();
SqlDataReader Reader= cmd.ExecuteReader();
int MaxID = 0;
if (Reader.Read())
{
    MaxID = Convert.ToInt32(Reader["MAXID"].ToString());
    MaxID += 1;
}
顺便说一下,您的查询只从数据库返回一行和一列,因此更好的方法是使用ExecuteScalar方法

SqlCommand cmd= new SqlCommand("select MAX(G_ID) as MAXID from Groups", sqlc);
sqlc.Open();
object result = cmd.ExecuteScalar();
if (result != null)
{
    MaxID = Convert.ToInt32(result) + 1;
}

在访问DataReader之前,您需要调用Read方法将读取器定位到第一条记录上

SqlConnection sqlc= new SqlConnection("data source=. ; database=LDatabase; integrated security=true");
SqlCommand cmd= new SqlCommand("select MAX(G_ID) as MAXID from Groups", sqlc);

sqlc.Open();
SqlDataReader Reader= cmd.ExecuteReader();
int MaxID = 0;
if (Reader.Read())
{
    MaxID = Convert.ToInt32(Reader["MAXID"].ToString());
    MaxID += 1;
}
顺便说一下,您的查询只从数据库返回一行和一列,因此更好的方法是使用ExecuteScalar方法

SqlCommand cmd= new SqlCommand("select MAX(G_ID) as MAXID from Groups", sqlc);
sqlc.Open();
object result = cmd.ExecuteScalar();
if (result != null)
{
    MaxID = Convert.ToInt32(result) + 1;
}

在访问DataReader之前,您需要调用Read方法将读取器定位到第一条记录上

SqlConnection sqlc= new SqlConnection("data source=. ; database=LDatabase; integrated security=true");
SqlCommand cmd= new SqlCommand("select MAX(G_ID) as MAXID from Groups", sqlc);

sqlc.Open();
SqlDataReader Reader= cmd.ExecuteReader();
int MaxID = 0;
if (Reader.Read())
{
    MaxID = Convert.ToInt32(Reader["MAXID"].ToString());
    MaxID += 1;
}
顺便说一下,您的查询只从数据库返回一行和一列,因此更好的方法是使用ExecuteScalar方法

SqlCommand cmd= new SqlCommand("select MAX(G_ID) as MAXID from Groups", sqlc);
sqlc.Open();
object result = cmd.ExecuteScalar();
if (result != null)
{
    MaxID = Convert.ToInt32(result) + 1;
}

在访问DataReader之前,您需要调用Read方法将读取器定位到第一条记录上

SqlConnection sqlc= new SqlConnection("data source=. ; database=LDatabase; integrated security=true");
SqlCommand cmd= new SqlCommand("select MAX(G_ID) as MAXID from Groups", sqlc);

sqlc.Open();
SqlDataReader Reader= cmd.ExecuteReader();
int MaxID = 0;
if (Reader.Read())
{
    MaxID = Convert.ToInt32(Reader["MAXID"].ToString());
    MaxID += 1;
}
顺便说一下,您的查询只从数据库返回一行和一列,因此更好的方法是使用ExecuteScalar方法

SqlCommand cmd= new SqlCommand("select MAX(G_ID) as MAXID from Groups", sqlc);
sqlc.Open();
object result = cmd.ExecuteScalar();
if (result != null)
{
    MaxID = Convert.ToInt32(result) + 1;
}

您正在检查读卡器是否有行,但您没有读取它们。改为这样做(注意,我还在包装东西以确保它们得到正确处理):


您正在检查读卡器是否有行,但您没有读取它们。改为这样做(注意,我还在包装东西以确保它们得到正确处理):


您正在检查读卡器是否有行,但您没有读取它们。改为这样做(注意,我还在包装东西以确保它们得到正确处理):


您正在检查读卡器是否有行,但您没有读取它们。改为这样做(注意,我还在包装东西以确保它们得到正确处理):




在访问列之前,需要调用
Reader.Read()
。如果检索单个列,最好使用ExecuteScalarvalue@marc_s我现在做了,但还是一样error@YuriyGalanter这是一个整数table@Behnaz没关系。可以检索任何值。在访问列之前,需要调用
Reader.Read()
。如果检索单个值,最好使用ExecuteScalarvalue@marc_s我现在做了,但还是一样error@YuriyGalanter这是一个整数table@Behnaz没关系。可以检索任何值。在访问列之前,需要调用
Reader.Read()
。如果检索单个值,最好使用ExecuteScalarvalue@marc_s我现在做了,但还是一样error@YuriyGalanter这是一个整数table@Behnaz没关系。可以检索任何值。在访问列之前,需要调用
Reader.Read()
。如果检索单个值,最好使用ExecuteScalarvalue@marc_s我现在做了,但还是一样error@YuriyGalanter这是一个整数table@Behnaz没关系。任何值都可以检索。谢谢,我不知道为什么我最近开始在VB中思考当我执行上述代码(ExecuteScalar())时,我收到以下错误:System.InvalidOperationException:ExecuteScalar:CommandText属性尚未初始化奇怪的是,CommandText是SELECT。。。。在命令构造函数中。您确定正在执行上面所示的同一个SqlCommand吗?我也尝试过:sqlc.Open();Int32结果=(Int32)cmd.ExecuteScalar();如果(result!=0){result+=1;}但我仍然会得到相同的错误。如果您尝试DataReader版本,您会得到一些结果吗?谢谢,我不知道为什么我最近在执行上述代码(ExecuteScalar())时开始在VB中思考我收到此错误:System.InvalidOperationException:ExecuteScalar:CommandText属性尚未初始化。奇怪的是,CommandText是SELECT。。。。在命令构造函数中。您确定正在执行上面所示的同一个SqlCommand吗?我也尝试过:sqlc.Open();Int32结果=(Int32)cmd.ExecuteScalar();如果(result!=0){result+=1;}但我仍然会得到相同的错误。如果您尝试DataReader版本,您会得到一些结果吗?谢谢,我不知道为什么我最近在执行上述代码(ExecuteScalar())时开始在VB中思考我收到此错误:System.InvalidOperationException:ExecuteScalar:CommandText属性尚未初始化。奇怪的是,CommandText是SELECT。。。。在命令构造函数中。您确定正在执行上面所示的同一个SqlCommand吗?我也尝试过:sqlc.Open();Int32结果=(Int32)cmd.ExecuteScalar();如果(result!=0){result+=1;}但我仍然会得到相同的错误。如果您尝试DataReader版本,您会得到一些结果吗?谢谢,我不知道为什么我最近在执行上述代码(ExecuteScalar())时开始在VB中思考我收到此错误:System.InvalidOperationException:ExecuteScalar:CommandText属性尚未初始化。奇怪的是,CommandText是SELECT。。。。在命令构造函数中。您确定正在执行上面所示的同一个SqlCommand吗?我也尝试过:sqlc.Open();Int32结果=(Int32)cmd.ExecuteScalar();如果(result!=0){result+=1;}但我还是得到了相同的错误。如果您尝试DataReader版本,您会得到什么结果吗?