C# 如何从access数据库中获取多行
我试图根据列C# 如何从access数据库中获取多行,c#,mysql,sql,visual-studio,C#,Mysql,Sql,Visual Studio,我试图根据列Veh\u ID存储access数据库的每一行。找到的数据可能基于多行,也可能不基于多行。我当前使用的代码可以复制单行,但是如果有多个结果,我只能得到第一个结果。有人能帮我吗?说到数据库,我是个傻瓜。我试图搜索谷歌,但似乎没有人需要我需要的东西。以下是我使用的代码: string cmd1 = "SELECT * FROM Veh_checkup WHERE Veh_ID = " + veh_idd + ""; OleDbCommand cmd = new OleDbCommand(
Veh\u ID
存储access数据库的每一行。找到的数据可能基于多行,也可能不基于多行。我当前使用的代码可以复制单行,但是如果有多个结果,我只能得到第一个结果。有人能帮我吗?说到数据库,我是个傻瓜。我试图搜索谷歌,但似乎没有人需要我需要的东西。以下是我使用的代码:
string cmd1 = "SELECT * FROM Veh_checkup WHERE Veh_ID = " + veh_idd + "";
OleDbCommand cmd = new OleDbCommand(cmd1, con);
OleDbDataReader read = cmd.ExecuteReader();
read.Read();
veh_id=null;
int i=0;
foreach (var a in read)
{
try
{
veh_id = veh_id + " " + read[i].ToString();
}
catch { }
i++;
}
您以错误的方式使用datareader。您必须在while循环中调用datareader,而不是像这样调用一次:
while(theDataReader.Read())
{
// do your stuff in a loop now
}
string cmd1 = "SELECT * FROM Veh_checkup WHERE Veh_ID = " + veh_idd + "";
OleDbCommand cmd = new OleDbCommand(cmd1, con);
OleDbDataReader read = cmd.ExecuteReader();
veh_id=null;
con.Open();
while(read.Read()) //your reader
{
try
{
veh_id = veh_id + " " + read[i].ToString();
}
catch { }
}
因此,在您的代码中使用这种方法看起来是这样的:
while(theDataReader.Read())
{
// do your stuff in a loop now
}
string cmd1 = "SELECT * FROM Veh_checkup WHERE Veh_ID = " + veh_idd + "";
OleDbCommand cmd = new OleDbCommand(cmd1, con);
OleDbDataReader read = cmd.ExecuteReader();
veh_id=null;
con.Open();
while(read.Read()) //your reader
{
try
{
veh_id = veh_id + " " + read[i].ToString();
}
catch { }
}
有几件事我要指出,有些是针对你的问题的,有些不是:
- 使用OleDbDataReader.Read()移动到下一条记录
- 使用
在循环中连接字符串,使用StringBuilder
将在每次迭代时在堆上创建一个新字符串string=string+“something”
- 在一次性对象上使用
块
。您永远不会知道发生了错误。至少你应该把错误记录在某个地方,这样你就知道你需要修复一些东西catch{}
将从当前正在读取的记录的列OleDbDataReader[i]
中获取数据,而不是从行i
i
- 不要在生产代码中使用
,尤其是当您仅使用1列时。这是不必要的数据库数据检索,也是不必要的网络流量SELECT*
static string GetStringData(string vehID)
{
StringBuilder builder = new StringBuilder();
string cmd1 = "SELECT Column1 FROM Veh_checkup WHERE Veh_ID = @VehID";
using (OleDbConnection con = new OleDbConnection("YourConnectionString"))
using (OleDbCommand cmd = new OleDbCommand(cmd1, con))
{
con.Open();
cmd.Parameters.AddWithValue("@VehID", vehID);
using (OleDbDataReader reader = cmd.ExecuteReader())
{
while (reader.Read())
{
builder.Append(" " + reader.GetString(0));
}
}
}
return builder.ToString();
}
还是不走运。它只返回一行。您能解释一下“theDataReader”变量在这里的作用吗?我使用了“read”而不是它(在while循环中),您的语句表明您只请求一个datarow。这是id与Veh_id匹配的数据行。实际上,我有多个结果对应于同一个“Veh_id”,所以我需要获得所有结果。您能建议如何请求多行吗?这是获取多行的代码。检查这个例子的一个完整的例子:如果这个或另一个答案是有用的,你应该考虑把它标记为答案或张贴自己的答案,而不是