C#使用while循环将项添加到List [关闭]
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#使用while循环将项添加到List [关闭]相关的知识,希望对你有一定的参考价值。
事实证明代码没有任何问题,只是忘了启动XAMPP服务器-_-
我正在尝试与VS2017ENT内部的Xamarin合作开发一个跨平台的C#应用程序。我已经开始了一个新的项目,作为使用.NET标准代码共享策略的主要细节。
我的目标是使用数据库中的记录填充List。记录确实被取出,我可以毫无问题地显示这些记录。我遇到的麻烦是使用while循环动态添加这些项目到列表中。
这是我到目前为止的代码,但是使用While循环不起作用。我没有错误或错误的线条,它确实输出我分配的前两个项目manualy(Text =“Overzicht”和Text =“Overzicht2”)。但是项目(文本=(“标题:”+ rdr [1]))没有出现。
string errorMessage = "";
items = new List<Item>();
var mockItems = new List<Item>
{
new Item { Id = Guid.NewGuid().ToString(), Text = "Overzicht", Description=("Variabele inhoud") },
new Item { Id = Guid.NewGuid().ToString(), Text = "Overzicht2", Description=("Variabele inhoud2") },
};
string connStr = "server=localhost;user=root;database=xamarin;port=3306;password=";
mysqlConnection conn = new MySqlConnection(connStr);
try
{
conn.Open();
string sql = "SELECT * FROM Country";
MySqlCommand cmd = new MySqlCommand(sql, conn);
MySqlDataReader rdr = cmd.ExecuteReader();
while (rdr.Read())
{
mockItems.Add(new Item { Id = Guid.NewGuid().ToString(), Text = ("Title: " + rdr[1]), Description = ("Description: " + rdr[2]) });
}
rdr.Close();
}
catch (Exception ex)
{
errorMessage += ex.ToString();
}
conn.Close();
datareader提供了方便的查询类型数据的方法:
https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/retrieving-data-using-a-datareader
使用适当的GetXXXX()
方法 - 可以从这里获取列表(与您的方法相同):https://docs.microsoft.com/en-us/dotnet/api/system.data.sqlclient.sqldatareader?view=netframework-4.7.1
GetString()
,GetInt()
等
您也可以更改阅读器本身的使用情况,它可能根本不会返回任何数据:
using (var con = new MySqlConnection("..."))
{
using (var command = new MySqlCommand( "SELECT * FROM Country", con))
{
using (var reader = command.ExecuteReader())
{
if (reader.HasRows)
{
while (reader.NextResult())
{
// handle resultts
}
}
else
{
Debug.Write("No results");
}
}
}
}
即使遇到异常,使用也会为您打开和关闭实例 - 您可以避免以这种方式悬空打开连接。
非常感谢大家的提示和信息。我的脚本现在如下:
using System;
using System.Data;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using App3.Models;
using MySql.Data;
using MySql.Data.MySqlClient;
[assembly: Xamarin.Forms.Dependency(typeof(App3.Services.MockDataStore))]
namespace App3.Services
{
public class MockDataStore : IDataStore<Item>
{
List<Item> items;
public MockDataStore()
{
string errorMessage = "";
items = new List<Item>();
var mockItems = new List<Item>
{
new Item { Id = Guid.NewGuid().ToString(), Text = "Overzicht", Description=("Variabele inhoud") },
new Item { Id = Guid.NewGuid().ToString(), Text = "Overzicht2", Description=("Variabele inhoud2") },
};
using (MySqlConnection conn = new MySqlConnection("server=localhost;user=root;database=xamarin;port=3306;password="))
{
try
{
conn.Open();
using (MySqlCommand cmd = new MySqlCommand("SELECT * FROM Country", conn))
{
using (MySqlDataReader rdr = cmd.ExecuteReader())
{
while (rdr.Read())
{
mockItems.Add(new Item { Id = Guid.NewGuid().ToString(), Text = rdr[1].ToString(), Description = rdr[2].ToString() });
}
rdr.Close();
}
}
}
catch (Exception ex)
{
errorMessage += ex.ToString();
}
conn.Close();
}
foreach (var item in mockItems)
{
items.Add(item);
}
}
public async Task<bool> AddItemAsync(Item item)
{
items.Add(item);
return await Task.FromResult(true);
}
public async Task<bool> UpdateItemAsync(Item item)
{
var _item = items.Where((Item arg) => arg.Id == item.Id).FirstOrDefault();
items.Remove(_item);
items.Add(item);
return await Task.FromResult(true);
}
public async Task<bool> DeleteItemAsync(Item item)
{
var _item = items.Where((Item arg) => arg.Id == item.Id).FirstOrDefault();
items.Remove(_item);
return await Task.FromResult(true);
}
public async Task<Item> GetItemAsync(string id)
{
return await Task.FromResult(items.FirstOrDefault(s => s.Id == id));
}
public async Task<IEnumerable<Item>> GetItemsAsync(bool forceRefresh = false)
{
return await Task.FromResult(items);
}
}
}
以上是关于C#使用while循环将项添加到List [关闭]的主要内容,如果未能解决你的问题,请参考以下文章