来自 SQL 数据库的 MVC 多个结果无法正常工作
MVC multiple results from SQL database not working correctly
早上好,
我周末一直在学习 MVC .NET,我试图从数据库中获取数据,但结果没有显示:
我正在使用以下代码:
public class ListClientsController : Controller
{
private string QueryString;
private string myConnectionString;
public List<ListClients> models = new List<ListClients>();
public ActionResult Index()
{
bool iterate = true;
string iname = "";
string isurname = "";
int iIDNO = 0;
QueryString = "select FirstName, Surname, IDNumber from [iDtB].[dbo].[Clients]";
myConnectionString = "Data Source=<name>\SQLEXPRESS01;Integrated Security=SSPI";
SqlConnection iDtBData = new SqlConnection(myConnectionString);
iDtBData.Open();
SqlCommand SQLCMD = new SqlCommand(QueryString, iDtBData);
SqlDataReader Reader = SQLCMD.ExecuteReader();
Reader.Read();
while (iterate)
{
try
{
iname = Reader["FirstName"].ToString();
isurname = Reader["Surname"].ToString();
int.TryParse(Reader["IDNumber"].ToString(), out iIDNO);
models.Add(new ListClients
{
Name = iname,
Surname = isurname,
IDNO = iIDNO
});
Reader.NextResult();
}
catch
{
iterate = false;
}
}
Reader.Close();
iDtBData.Close();
return View(models);
}
}
出于某种原因,我得到了这个结果:
MVC Client results
现在值得注意的是,我知道由于字段不匹配,我得到的 ID 号为“0”,我不明白为什么我无法显示多个结果。
提前致谢!
您实际上并没有阅读查询返回的所有结果。 NextResult() returns 下一个结果集,而不是下一个记录。用 Read() 替换它,您应该开始获取所有结果。
我还会消除 Try/Catch 循环,因为这会阻止您看到确实发生的任何错误。另外,Read returns a true/false 可以让您知道它是否读取了记录,从而使删除变得容易。
while (Reader.Read())
{
try
{
iname = Reader["FirstName"].ToString();
isurname = Reader["Surname"].ToString();
int.TryParse(Reader["IDNumber"].ToString(), out iIDNO);
models.Add(new ListClients
{
Name = iname,
Surname = isurname,
IDNO = iIDNO
});
}
我还建议您了解如何使用 using 语句 (https://msdn.microsoft.com/en-us/library/yh598w02.aspx) 来改进连接和数据的处理 reader。
早上好,
我周末一直在学习 MVC .NET,我试图从数据库中获取数据,但结果没有显示:
我正在使用以下代码:
public class ListClientsController : Controller
{
private string QueryString;
private string myConnectionString;
public List<ListClients> models = new List<ListClients>();
public ActionResult Index()
{
bool iterate = true;
string iname = "";
string isurname = "";
int iIDNO = 0;
QueryString = "select FirstName, Surname, IDNumber from [iDtB].[dbo].[Clients]";
myConnectionString = "Data Source=<name>\SQLEXPRESS01;Integrated Security=SSPI";
SqlConnection iDtBData = new SqlConnection(myConnectionString);
iDtBData.Open();
SqlCommand SQLCMD = new SqlCommand(QueryString, iDtBData);
SqlDataReader Reader = SQLCMD.ExecuteReader();
Reader.Read();
while (iterate)
{
try
{
iname = Reader["FirstName"].ToString();
isurname = Reader["Surname"].ToString();
int.TryParse(Reader["IDNumber"].ToString(), out iIDNO);
models.Add(new ListClients
{
Name = iname,
Surname = isurname,
IDNO = iIDNO
});
Reader.NextResult();
}
catch
{
iterate = false;
}
}
Reader.Close();
iDtBData.Close();
return View(models);
}
}
出于某种原因,我得到了这个结果:
MVC Client results
现在值得注意的是,我知道由于字段不匹配,我得到的 ID 号为“0”,我不明白为什么我无法显示多个结果。
提前致谢!
您实际上并没有阅读查询返回的所有结果。 NextResult() returns 下一个结果集,而不是下一个记录。用 Read() 替换它,您应该开始获取所有结果。
我还会消除 Try/Catch 循环,因为这会阻止您看到确实发生的任何错误。另外,Read returns a true/false 可以让您知道它是否读取了记录,从而使删除变得容易。
while (Reader.Read())
{
try
{
iname = Reader["FirstName"].ToString();
isurname = Reader["Surname"].ToString();
int.TryParse(Reader["IDNumber"].ToString(), out iIDNO);
models.Add(new ListClients
{
Name = iname,
Surname = isurname,
IDNO = iIDNO
});
}
我还建议您了解如何使用 using 语句 (https://msdn.microsoft.com/en-us/library/yh598w02.aspx) 来改进连接和数据的处理 reader。