【发布时间】:2017-11-09 21:09:12
【问题描述】:
我正在尝试从给定的表中生成随机 ID。我可以看到在调试中生成的随机数,但是当我到达 reader.Read() 行时,它显示 Enumeration 没有产生任何结果。
我无法完全理解我所缺少的。
private static void GetRandomId(int maxValue)
{
string connectionString =
"Data Source=local;Initial Catalog=Test;user id=Test;password=Test123;";
string queryString = @"SELECT TOP 1 Id from Pointer WHERE Id > (RAND() * @max);";
using (var connection = new SqlConnection(connectionString))
{
var command = new SqlCommand(queryString, connection);
command.Parameters.AddWithValue("@max", maxValue);
connection.Open();
using (var reader = command.ExecuteReader()) <-- // Here I can see the randon value generated
{
while (reader.Read())
{
//Here reader shows : Enumeration yielded no results
Console.WriteLine("Value", reader[1]);
reader.Close();
}
}
}
}
【问题讨论】:
-
为什么
Id会大于maxValue和RAND()的乘积? -
另外,
reader[int]是从零开始的。所以你的数据(如果你有的话)将在reader[0]。顺便说一句,如果您到达Console.WriteLine行,这意味着至少有 1 行结果。最后,调用reader.Close()是不必要的(如果返回多于1 行,实际上会破坏它)。using负责这一点。也许你想使用break;? -
你将不得不钳制 rand 返回的值而不是乘以它
标签: c# sqlcommand